iOS狀態欄顯示問題匯總

問題

實際開發中,經常需要隱藏狀態欄,或者修改狀態欄的顏色,資料較分散,而且同樣的方法,有時候有效,有時候則無效

解決

statusBar有兩種字體顏色:

  • 默認的黑色(UIStatusBarStyleDefault)
  • 白色(UIStatusBarStyleLightContent)

可以在兩個地方設置statusBar的字體顏色,也稱為前景色,包括網絡標識,時間和電量指示的顏色。

  1. plist設置
    plist里可以設置app啟動時launch頁顯示的狀態欄顏色,在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),這里可以設置兩個值,就是上面提到那兩個:UIStatusBarStyleDefaultUIStatusBarStyleLightContent
    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’的效果也是白色

  1. 代碼設置
[[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;

可以參考關于使用preferredStatusBarStyle修改狀態欄顏色無效的原因以及解決方法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容