iOS系統上方有一個表示時間,wifi狀態,電量等等信息的狀態欄。
在某些app開發時需要顯示這個狀態欄。
Unity中提供了顯示狀態欄的設置。
具體在Player Settings的Resolution and Presentation下面
Status Bar Hidden默認爲true。
將其設爲false並選擇一種Status Bar的形式(默認,半透明,不透明)
設置好之後build,在模擬器上顯示出來。
可以看見顯示狀態欄會覆蓋了遊戲的視圖。
要怎麼解決這個問題呢。
比較簡單的辦法是,直接把遊戲UI和畫面下調20points。簡單粗暴。
但是如果你有幾十個場景要怎麼辦呢。。。
有沒有什麼辦法能把遊戲的視圖整體下調20points呢?
用ios status bar overlay unity做關鍵詞找到了下面的issue
[IOS] STATUS BAR OVERLAPS WITH APP UIVIEW
顯然,沒有被解決。
很多Unity方面關於iOS狀態欄覆蓋的提問最好的回答都是【不要顯示它】。
這不科學。。。。。。
在Unity生成iOS應用的過程中有兩個步驟,第一個步驟,生成xcode project。第二個步驟,從xcode project編譯打包成app。
既然生成了xcode的project,肯定有調整unity view的辦法。
在Unity生成Xcode的Project中最主要的一個文件是UnityAppController.mm
裏面處理了Unity的視圖顯示問題。所以只要在這個文件裏修正一下View視圖就可以了。
在UnityAooContrllor.mm裏面有這麼一句話。
1 |
_window = [[UIWindow alloc] initWithFrame: [UIScreen mainScreen].bounds]; |
這個_window被聲明爲UIWindow
iOS應用裏首先是要生成一個UIWindow,然後把UIView控制器的視圖加到UIWindow。通常在一個應用中只會有一個UIWindow。
所以這個·window應該就是生成的應用要使用的UIWindow。
將原來的初始化代碼用下面的代碼代替。
1 |
_window = [[UIWindow alloc] initWithFrame: CGRectMake ([UIScreen mainScreen].bounds.origin.x, [UIScreen mainScreen].bounds.origin.y + 20, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height -20)]; |