在app里我们经常会遇到有的界面状态栏需要是白色,有的需要是黑色的情况。
问题1.info.plist设置了但是vc里修改不掉颜色
应在info.plist加上这么一句,该意思为vc设置的优先级高于info.plist的设置
View controller-based status bar appearance Bool YES
问题2.preferredStatusBarStyle无法修改某一单独界面状态栏颜色
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
比如我有a,b,c三个界面,我需要a和c都显示白色,b显示黑色
因为我是继承于同一个nav,所以直接在nav里设置了这么一句话
self.navigationBar.barStyle = UIBarStyleBlack;
b界面里设置了
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
self.navigationController.navigationBar.hidden = YES;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleDefault;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
self.navigationController.navigationBar.hidden = NO;
}
这样就可以实现我们的需求了,其实重点在于
1.代码设置与info.plist设置的优先级
2.navigationBar.barStyle的类型设置
// UIBarStyleBlack:当它为black时statusbar颜色为白色
// UIBarStyleDefault:当它为default时statusbar颜色为黑色