iOS管理StatusBar

本文介绍iOS7以后怎么轻松管理StatusBar.
(如果公司让你整iOS6的,我觉得可以换工作了,这公司跟不上时代啊)

iOS中的StatusBar有两种样式,分别是UIStatusBarStyleDefault(黑色)和UIStatusBarStyleLightContent(白色),如下图:
iOS管理StatusBar_第1张图片
UIStatusBarStyleDefault
iOS管理StatusBar_第2张图片
UIStatusBarStyleLightContent
  • UIApplication来控制StatusBar

对于StatusBar我习惯使用ViewController来管理,苹果在iOS7以后也默认交给ViewController来管理
如果非得要用application来整,则需要在Info.plist里面设置View controller-based status bar appearance为NO.
然后可以调用以下代码来设置StatusBar:

[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];//设置模式
[[UIApplication sharedApplication] setStatusBarHidden:YES];//设置隐藏
  • ViewController便捷(一行搞定)控制StatusBar

若要使用ViewController来管理StatusBar
需要在Info.plist里面设置View controller-based status bar appearance为YES.
或者不做任何设置,则默认是ViewController来管理
当然,这个ViewController的window的根控制器,不是随便一个ViewController能搞的(iOS9以后,window必须要有一个根控制器,不然会报红)
在需要改变StatusBar的控制里面实现以下方法:

//控制StatusBar是否隐藏
- (BOOL)prefersStatusBarHidden
{
    return YES;
}
//控制StatusBar显示模式
- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}
  • 注意
    这两个方法是由系统来调用(自己调用不好使)
    所以我们要通知系统,我们更改了StatusBar的样式
    让系统调用这两个方法重新获取StatuBar的样式:
[self setNeedsStatusBarAppearanceUpdate];
//这个和UIView的setNeedsDisplay原理差不多(调用UIView对象的setNeedsDisplay方法后,系统会在下次页面刷新时,调用重绘该view

当我们调用setNeedsStatusBarAppearanceUpdate时
系统会调用application.window的rootViewController的preferredStatusBarStyle方法
我们的程序里一般都是用UINavigationController做root
如果是这种情况
那我们自己的UIViewController里的preferredStatusBarStyle根本不会被调用
这时候我们要子类化一个UINavigationController
在这个子类里面重写childViewControllerForStatusBarStyle方法
如下

- (UIViewController *)childViewControllerForStatusBarStyle:

上面代码的意思就是说,不要调用我自己(就是UINavigationController)的preferredStatusBarStyle方法
而是去调用navigationController.topViewController的preferredStatusBarStyle方法
这样写的话就能保证当前显示的UIViewController的preferredStatusBarStyle方法能影响statusBar的前景部分

  • 关于StatusBar的一些其他设置方式

1.设置程序启动时StatusBar是否隐藏:
可以在Info.plist 里面设置status bar is initially hidden为YES
也可以设置general:


iOS管理StatusBar_第3张图片
启动时隐藏.png

2.设置程序启动时StatusBar颜色:
可以在Info.plist 里面设置Status bar style
也可以设置general:


iOS管理StatusBar_第4张图片
设置启动BarStyle.png

感谢阅读
你的支持是我写作的唯一动力

关注我的文章微信公众号, 随时与你分享我的文章

iOS管理StatusBar_第5张图片
扫码关注我.jpg

你可能感兴趣的:(iOS管理StatusBar)