本文介绍iOS7以后怎么轻松管理StatusBar.
(如果公司让你整iOS6的,我觉得可以换工作了,这公司跟不上时代啊)
iOS中的StatusBar有两种样式,分别是UIStatusBarStyleDefault(黑色)和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:
2.设置程序启动时StatusBar颜色:
可以在Info.plist 里面设置Status bar style
也可以设置general:
感谢阅读
你的支持是我写作的唯一动力