首先了解navBar的style是會影響狀態(tài)欄顏色的
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
// UIBarStyleDefault 狀態(tài)欄會顯示黑色诚撵, UIBarStyleBlack 狀態(tài)欄顯示白色劫扒,而且赂鲤,注意這樣的設(shè)置育苟,深色模式的動態(tài)顏色也是有效果的戈锻,UIBarStyleBlack 會顯示深色模式的顏色挠他,但可能是系統(tǒng)bug女阀,深色模式后它也不會根據(jù)當(dāng)前是淺色模式而去改變顏色湖员,它會認(rèn)為你就是需要深色模式self.navigationController.navigationBar.barTintColor = kDEEP_BLUE_COLOR;
kDEEP_BLUE_COLOR 是動態(tài)顏色,淺色模式是藍(lán)色嘴高,深色模式是深灰色竿音,因為UIBarStyleBlack的設(shè)置,在navbar隱藏后拴驮,再顯示出來的時候它就顯示為 深灰色
執(zhí)行順序也會影響設(shè)置的狀態(tài)欄顏色
如果是系統(tǒng)的方法先走(黑色)春瞬,頁面的方法后走(白色),就會遵循頁面的方法(白色)套啤,反之則會相反
這個是app啟動后的堆棧 我在BSMyAccountViewController中打了斷點宽气,并且發(fā)現(xiàn)這個方法調(diào)用了好幾次
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
點擊進(jìn)入這個頁面的時候都會執(zhí)行這個方法 preferredStatusBarStyle,
這個設(shè)置比較方便,因為不需要改變其他的代碼潜沦,但是除非系統(tǒng)的導(dǎo)航欄隱藏了才會有效果
還有一種比較靠譜的設(shè)置方法
- 在工程里的info.plist 文件中添加一項配置
View controller-based status bar appearance 設(shè)置為NO (不要YES,YES就無效了)
全局就設(shè)置在appDelegate里面萄涯,或者你其他基類
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;-
特定的頁面就用
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 設(shè)置狀態(tài)欄為白色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // 設(shè)置狀態(tài)欄為默認(rèn)色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; }