优先级:
info.plist文件中(存的XML格式)
View controller-based status bar appearance -> YES,
则控制器对状态栏设置的优先级高于application,
-> NO,则以application为准,控制器设置状态栏prefersStatusBarHidden是无效的
隐藏
在plist中设置status bar 的Status bar is initially hidden属性为YES,启动时会隐藏状态栏,(注意:当 Status bar is initially hidden 设置为 NO 时,不管 View controller-based status bar appearance 设置为 NO 还是 YES ,都是无效的,只有 Status bar is initially hidden 设置为 YES 的时候, View controller-based status bar appearance 才生效)
在plist中设置View controller-based status bar appearance属性为NO,会全局隐藏状态栏。 —> 等价于在在 AppDelegate 中代码实现[UIApplication sharedApplication].statusBarHidden = YES;(注意:如果是通过代码实现状态栏的隐藏,必须在 Info.plist 文件中添加 View controller-based status bar appearance ,并且必须设置为 NO ,否则代码将不会有任何效果,而且代码只能隐藏 所有UIViewController 中的状态栏,不能隐藏在 LunchScreen时的状态栏。)
在当前UIViewController隐藏状态栏,可以通过在 Info.plist 文件中添加 View controller-based status bar appearance 属性,并设置为 YES。然后在对应的UIViewController中添加如下代码:
- (BOOL)prefersStatusBarHidden {
return YES;
}
如果想要单独设置状态栏颜色,可以使用kvc获取私有属性,设置方法如下:
/**
设置状态栏背景颜色
@param color 设置颜色
*/
- (void)setStatusBarBackgroundColor:(UIColor *)color {
UIView *statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if ([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
通过代码局部设置状态栏的文字颜色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;