首先了解navBar的style是會影響狀態(tài)欄顏色的
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
// UIBarStyleDefault 狀態(tài)欄會顯示黑色, UIBarStyleBlack 狀態(tài)欄顯示白色,而且,注意這樣的設置,深色模式的動態(tài)顏色也是有效果的,UIBarStyleBlack 會顯示深色模式的顏色,但可能是系統(tǒng)bug,深色模式后它也不會根據(jù)當前是淺色模式而去改變顏色,它會認為你就是需要深色模式self.navigationController.navigationBar.barTintColor = kDEEP_BLUE_COLOR;
kDEEP_BLUE_COLOR 是動態(tài)顏色,淺色模式是藍色,深色模式是深灰色,因為UIBarStyleBlack的設置,在navbar隱藏后,再顯示出來的時候它就顯示為 深灰色
執(zhí)行順序也會影響設置的狀態(tài)欄顏色
如果是系統(tǒng)的方法先走(黑色),頁面的方法后走(白色),就會遵循頁面的方法(白色),反之則會相反

這個是app啟動后的堆棧 我在BSMyAccountViewController中打了斷點,并且發(fā)現(xiàn)這個方法調(diào)用了好幾次
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
點擊進入這個頁面的時候都會執(zhí)行這個方法 preferredStatusBarStyle,
這個設置比較方便,因為不需要改變其他的代碼,但是除非系統(tǒng)的導航欄隱藏了才會有效果
還有一種比較靠譜的設置方法
- 在工程里的info.plist 文件中添加一項配置
View controller-based status bar appearance 設置為NO (不要YES,YES就無效了)
全局就設置在appDelegate里面,或者你其他基類
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;-
特定的頁面就用
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 設置狀態(tài)欄為白色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // 設置狀態(tài)欄為默認色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; }