【Unity】iOS狀態欄的顯示

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)];

 

因爲屏幕座標軸的原點實在屏幕的左上方,所以y座標是加了20points。
修改後再build下試試

完成!

參考:
iOS開發基礎知識:UIWindow和UIViewController

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章