问题
实际开发中,经常需要隐藏状态栏,或者修改状态栏的颜色,资料较分散,而且同样的方法,有时候有效,有时候则无效
解决
statusBar有两种字体颜色:
- 默认的黑色(UIStatusBarStyleDefault)
- 白色(UIStatusBarStyleLightContent)
可以在两个地方设置statusBar的字体颜色,也称为前景色,包括网络标识,时间和电量指示的颜色。
-
plist设置
plist里可以设置app启动时launch页显示的状态栏颜色,在plist里增加一行 UIStatusBarStyle(或者是“Status bar style”也可以),这里可以设置两个值,就是上面提到那两个:UIStatusBarStyleDefault 和UIStatusBarStyleLightContent
Default对应UIStatusBarStyleDefault,表示深色,用于亮色的背景中;Light对应UIStatusBarStyleLightContent,表示亮色,用于深色的背景中。也可以在info中添加
其中Gray style(default)对应的就是UIStatusBarStyleDefault,Transparent black style (alpha of 0.5)和Opaque black style这两个呈现的效果都是白色,输入字符串‘UIStatusBarStyleLightContent’的效果也是白色
- 代码设置
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
或者
//相对于上面的接口,这个接口可以动画的改变statusBar的前景色
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
该方法已经在iOS 9中被移除,苹果推荐的替代方法是覆盖实现-(UIStatusBarStyle)preferredStatusBarStyle,返回值可以是上面的那两个,根据要求自行选择。
可以参考[iOS]关于状态栏(UIStatusBar)的若干问题
后续问题
在一些环境中,可能还会遇到 preferredStatusBarStyle不执行 的情况,这是因为在ViewController中加入了UINavigationController使得导航控制器不会将preferredStatusBarStyle这个方法的调用转给它的子视图,而是由导航控制器本身进行管理,也就是说,如果你使用了UINavigationController,且navigationBar没有被隐藏的话,它的rootController及之后push的viewController的preferredStatusBarStyle都不会被调用。
假如你想用调用preferredStatusBarStyle修改的话,可以隐藏导航栏(navigationController.navigationBarHidden = YES)或设置navigationBarStyle从Default->Black,即
/** 将状态栏文本颜色设置为白色 */
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
/** 将状态栏文本颜色设置为黑色 ,默认就是黑色 */
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;