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

這個(gè)是app啟動(dòng)后的堆棧 我在BSMyAccountViewController中打了斷點(diǎn),并且發(fā)現(xiàn)這個(gè)方法調(diào)用了好幾次
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
點(diǎn)擊進(jìn)入這個(gè)頁面的時(shí)候都會(huì)執(zhí)行這個(gè)方法 preferredStatusBarStyle,
這個(gè)設(shè)置比較方便,因?yàn)椴恍枰淖兤渌拇a,但是除非系統(tǒng)的導(dǎo)航欄隱藏了才會(huì)有效果
還有一種比較靠譜的設(shè)置方法
- 在工程里的info.plist 文件中添加一項(xiàng)配置
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; }