首先了解navBar的style是会影响状态栏颜色的
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
// UIBarStyleDefault 状态栏会显示黑色, UIBarStyleBlack 状态栏显示白色,而且,注意这样的设置,深色模式的动态颜色也是有效果的,UIBarStyleBlack 会显示深色模式的颜色,但可能是系统bug,深色模式后它也不会根据当前是浅色模式而去改变颜色,它会认为你就是需要深色模式self.navigationController.navigationBar.barTintColor = kDEEP_BLUE_COLOR;
kDEEP_BLUE_COLOR 是动态颜色,浅色模式是蓝色,深色模式是深灰色,因为UIBarStyleBlack的设置,在navbar隐藏后,再显示出来的时候它就显示为 深灰色
执行顺序也会影响设置的状态栏颜色
如果是系统的方法先走(黑色),页面的方法后走(白色),就会遵循页面的方法(白色),反之则会相反
Screen Shot 2020-07-21 at 11.30.55 AM.png
这个是app启动后的堆栈 我在BSMyAccountViewController中打了断点,并且发现这个方法调用了好几次
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
点击进入这个页面的时候都会执行这个方法 preferredStatusBarStyle,
这个设置比较方便,因为不需要改变其他的代码,但是除非系统的导航栏隐藏了才会有效果
还有一种比较靠谱的设置方法
- 在工程里的info.plist 文件中添加一项配置
View controller-based status bar appearance 设置为NO (不要YES,YES就无效了)
-
全局就设置在appDelegate里面,或者你其他基类
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; -
特定的页面就用
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // 设置状态栏为白色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // 设置状态栏为默认色 [UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault; }
网友评论