iOS 狀態(tài)欄前景顏色

相關(guān)的理論知識

狀態(tài)欄前景顏色種類
  • 默認的黑色(UIStatusBarStyleDefault)
  • 白色(UIStatusBarStyleLightContent)
狀態(tài)欄前景顏色設(shè)置的地方有兩個:plist設(shè)置 和 代碼設(shè)置

1.plist里面設(shè)置:

1.Targets=>General=>Deployment Info 
     這里可以設(shè)置啟動圖的狀態(tài)欄是否顯示及其顏色
2.Targets=>Info=>View controller-based status bar appearance
  YES,
  則控制器對狀態(tài)欄設(shè)置的優(yōu)先級高于 
  [[UIApplication sharedApplication] setStatusBarStyle:<#UIStatusBarStyle#>];
  NO,
  則以 [[UIApplication sharedApplication] setStatusBarStyle:<#UIStatusBarStyle#>]; 
  為準

2.代碼設(shè)置
UIViewController有四個相關(guān)的函數(shù)

- (UIStatusBarStyle)preferredStatusBarStyle;
- (BOOL)prefersStatusBarHidden;
- (void)setNeedsStatusBarAppearanceUpdate;
- (UIViewController *)childViewControllerForStatusBarStyle;
  • -(BOOL)prefersStatusBarHidden;
    在UIViewController里重寫此方法,可以定制某個 控制器 對應(yīng)的狀態(tài)欄是否隱藏

  • -(UIStatusBarStyle)preferredStatusBarStyle;
    在UIViewController里重寫此方法,可以定制某個 控制器 對應(yīng)的狀態(tài)欄前景顏色

  • -(void)setNeedsStatusBarAppearanceUpdate;
    如果UIViewController已經(jīng)在顯示,你還要更改statusBar的前景色,那么,你首先需要調(diào)用下面的setNeedsStatusBarAppearanceUpdate方法(這個方法會通知系統(tǒng)去調(diào)用當前UIViewController的preferredStatusBarStyle方法

  • -(UIViewController *)childViewControllerForStatusBarStyle;
    我們的程序里一般都是用UINavigationController做root,如果是這種情況,那我們自己的UIViewController里的preferredStatusBarStyle根本不會被調(diào)用。
    這種情況下childViewControllerForStatusBarStyle就派上用場了,我們要子類化一個UINavigationController,在這個子類里面重寫childViewControllerForStatusBarStyle方法,如下:

- (UIViewController *)childViewControllerForStatusBarStyle{
     return self.topViewController;
}

意思是,不要調(diào)用UINavigationController的preferredStatusBarStyle方法,而是去調(diào)用navigationController.topViewController的preferredStatusBarStyle方法,這樣就能讓當前顯示的UIViewController的preferredStatusBarStyle方法能影響statusBar的樣式

我的實踐

  1. 設(shè)置啟動頁狀態(tài)欄

    Targets=>General=>Deployment Info 在這里設(shè)置狀態(tài)欄是否顯示及其樣式
    
  2. 設(shè)置控制器優(yōu)先于Application

    Targets=>Info=>View controller-based status bar appearance 設(shè)置為YES
    
  3. 讓當前顯示的UIViewController能控制狀態(tài)欄的樣式

    BaseNavigationController 繼承自 UINavigationController,
    重寫childViewControllerForStatusBarStyle方法,如下:
    
    - (UIViewController *)childViewControllerForStatusBarStyle {
          return self.topViewController;
    }
    
  4. 在BaseViewController里面設(shè)置該App的主題狀態(tài)欄樣式

    - (UIStatusBarStyle)preferredStatusBarStyle {
       return <#UIStatusBarStyle#>;
    }
    
  • 在需要定制化狀態(tài)欄樣式的SomeoneViewController里設(shè)置特定的狀態(tài)欄樣式

    - (UIStatusBarStyle)preferredStatusBarStyle {
         return <#UIStatusBarStyle#>;
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容