狀態列是一件很坑爹的事情,一不弄不好就會出現你不想要的結果。
修改狀態列的顏色
iOS 9
修改狀態列的顏色在 iOS 9 之前我們會這樣做:
- 首先在.plist檔案中設定 UIViewControllerBasedStatusBarAppearanced 的值為NO。
- 然後通過以下程式碼去控制狀態列的顏色
+ (void)statusBarColorWhite:(BOOL)isWhite
{
[[UIApplication sharedApplication] setStatusBarStyle:isWhite ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault];
}
複製程式碼
這種方式操作起來比較簡便。
iOS 9 之後
在 iOS 9 之後上面的方式已經被遺棄了。雖然還可以用,但是會出現一個warnning,一個黃色的感嘆號會使我們這些有強迫症患者的人感到非常難受,儘管我的工程中已經有536個warnning了。
新的方法比較麻煩,但還是有道可循的。下面就是我總結的方法:
- 首先,你要自己判斷當前的 viewController 是否有 navigationController。
- 如果當前 viewController
不在
navigationController 中。
這時,要修改狀態列的顏色只需要在這個viewController中重寫 - (UIStatusBarStyle)preferredStatusBarStyle 即可。- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault/UIStatusBarStyleLightContent; } 複製程式碼
- 如果當前 viewController
在
navigationController中。
這時,要修改狀態列顏色就不能用上邊的方法了。因為你試過後就會發現這種情況下你在進入 viewController 的過程中並沒有進入到 preferredStatusBarStyle 方法裡面去。下面是可行的方法:- 如果要設定整個 navigationController,即整個 navigationController 的狀態列顏色都是統一的,要在 navigationController 中去重寫 - (UIStatusBarStyle)preferredStatusBarStyle。
- 如果要單獨設定某個 viewController 的狀態列顏色,那麼就需要在 viewController 的 viewWillAppear 中去設定:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.barStyle = UIStatusBarStyleDefault;//設定狀態列為黑色 self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;//設定狀態列為白色 } 複製程式碼
設定隱藏、顯示狀態列
- 如果你在 .plist 檔案中設定了 UIViewControllerBasedStatusBarAppearanced 為NO。那麼你需要使用以下方法來設定:
這種設定方法是全域性設定的,如果在某特定頁面隱藏了狀態列,在需要顯示的地方就要再設定一次顯示狀態列。[[UIApplication sharedApplication] setStatusBarStyle:(UIStatusBarStyle)]; 複製程式碼
這種方法會有一個warnning。 這種設定方式可能會導致一個系統導航欄飛出螢幕之外的Bug。(別問我為什麼知道...) - 如果你沒有在 .plist 檔案中設定 UIViewControllerBasedStatusBarAppearanced 為NO。那麼要在 viewController 中重寫 prefersStatusBarHidden 來進行設定:
- (BOOL)prefersStatusBarHidden { return YES; } 複製程式碼
小結:以上兩種操作中都同意使用第二種方法會更省事。