ios上状态栏 就是指的最上面的20像素高的部分,显示了电池、时间、运营商等信息。
可以选择status bar 之上元素的颜色(黑、白) ,
- 默认的黑色(UIStatusBarStyleDefault)
- 白色(UIStatusBarStyleLightContent)
在实际使用时有下面设置方式:
可以通过plist 文件进行配置,在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),这里可以设置两个值,就是上面提到那两个。
使用下面代码,可以对status bar进行配置,但是苹果已经不推荐使用(build 时会产生issue)
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarHidden:NO];
苹果推荐使用preferredStatusBarStyle 和prefersStatusBarHidden方法,但是前提是UIViewControllerBasedStatusBarAppearance 在plist里设置为YES。
- (BOOL)prefersStatusBarHidden
{
return NO;
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
preferredStatusBarStyle 和prefersStatusBarHidden方法的调用时机是setNeedsStatusBarAppearanceUpdate调用后由系统执行。
注意:我们的程序里一般都是用UINavigationController做root,如果是这种情况,那我们自己的UIViewController里的preferredStatusBarStyle 和prefersStatusBarHidden方法根本不会被调用;系统会调用application.window的rootViewController的preferredStatusBarStyle 和prefersStatusBarHidden方法,解决方法是重定义UINavigationController 的childViewControllerForStatusBarStyle 和childViewControllerForStatusBarHidden 方法来找到当前view 的preferredStatusBarStyle 和prefersStatusBarHidden方法。代码如下:
@interface UINavigationController (StatusBarStyle)
@end
@implementation UINavigationController (StatusBarStyle)
-(UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
-(UIViewController *)childViewControllerForStatusBarHidden {
return self.topViewController;
}
@end
UIViewControllerBasedStatusBarAppearance 在plist里设置为NO。表示status bar 不可在个别viewController 中使用方法preferredStatusBarStyle 和prefersStatusBarHidden进行配置修改。
总结一下,目前苹果推荐使用 UIViewControllerBasedStatusBarAppearance = YES; 加preferredStatusBarStyle 和prefersStatusBarHidden组合来配置status bar 的显示效果,但是在UINavigationController引导时需要重写childViewControllerForStatusBarStyle 和childViewControllerForStatusBarHidden 方法。