問題
實際開發中,經常需要隱藏狀態欄,或者修改狀態欄的顏色,資料較分散,而且同樣的方法,有時候有效,有時候則無效
解決
statusBar有兩種字體顏色:
- 默認的黑色(UIStatusBarStyleDefault)
- 白色(UIStatusBarStyleLightContent)
可以在兩個地方設置statusBar的字體顏色,也稱為前景色,包括網絡標識,時間和電量指示的顏色。
-
plist設置
plist里可以設置app啟動時launch頁顯示的狀態欄顏色,在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),這里可以設置兩個值,就是上面提到那兩個:UIStatusBarStyleDefault 和UIStatusBarStyleLightContent
Project->General->Deployment Info中設置
Default對應UIStatusBarStyleDefault,表示深色,用于亮色的背景中;Light對應UIStatusBarStyleLightContent,表示亮色,用于深色的背景中。也可以在info中添加
Project->Info->Custom iOS Target Properties中添加
其中Gray style(default)對應的就是UIStatusBarStyleDefault,Transparent black style (alpha of 0.5)和Opaque black style這兩個呈現的效果都是白色,輸入字符串‘UIStatusBarStyleLightContent’的效果也是白色
- 代碼設置
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或者
//相對于上面的接口,這個接口可以動畫的改變statusBar的前景色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
該方法已經在iOS 9中被移除,蘋果推薦的替代方法是覆蓋實現-(UIStatusBarStyle)preferredStatusBarStyle,返回值可以是上面的那兩個,根據要求自行選擇。
可以參考[iOS]關于狀態欄(UIStatusBar)的若干問題
后續問題
在一些環境中,可能還會遇到 preferredStatusBarStyle不執行 的情況,這是因為在ViewController中加入了UINavigationController使得導航控制器不會將preferredStatusBarStyle這個方法的調用轉給它的子視圖,而是由導航控制器本身進行管理,也就是說,如果你使用了UINavigationController,且navigationBar沒有被隱藏的話,它的rootController及之后push的viewController的preferredStatusBarStyle都不會被調用。
假如你想用調用preferredStatusBarStyle修改的話,可以隱藏導航欄(navigationController.navigationBarHidden = YES)或設置navigationBarStyle從Default->Black,即
/** 將狀態欄文本顏色設置為白色 */
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
/** 將狀態欄文本顏色設置為黑色 ,默認就是黑色 */
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;