iOS状态栏(UIStatusBar)
1.设置启动页的状态栏样式
进入Xcode的Targets->General->DeploymentInfo->Status Bar Style,设置其值为Default时,状态栏样式为黑色;设置其值为Light时,状态栏样式为白色。设置完成之后info.plist里面的Status bar style值自动改变。

(在info.plist文件中,找到Status bar style键,其值为Gray style (default)时,状态栏样式为黑色;其值为UIStatusBarStyleLightContent时,状态栏样式为白色,作用跟直接在Deployment Info里选择一样。)
2.如果设置info.plist中UIViewControllerBasedStatusBarAppearance为NO,表示不需要控制器自己控制状态栏则:
启动后在AppDelegate中全局设置状态栏样式
[[UIApplicationsharedApplication]setStatusBarStyle:UIStatusBarStyleLightContent];
如果页面需要特殊处理UIStatusBarStyleDefault,在viewWillAppear和viewWillDisappear中设置即可
- (void)viewWillAppear:(BOOL)animated {
[superviewWillAppear:animated];
[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleDefault;
}
- (void)viewWillDisappear:(BOOL)animated {
[superviewWillDisappear:animated];
[UIApplicationsharedApplication].statusBarStyle=UIStatusBarStyleLightContent;
}
3.如果设置info.plist中UIViewControllerBasedStatusBarAppearance为YES,那么需要在控制器里实现preferredStatusBarStyle方法,自己控制状态栏,全局设置无效
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
对于导航控制器,需要在分类中实现preferredStatusBarStyle方法来控制导航控制器以及子控制器的状态栏
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
但是如果子控制器的状态栏显示与UINavigationController分类里设置的不一致,子控制器即使实现preferredStatusBarStyle方法也不会被调用,就需要特殊处理
解决办法:让UINavigationController实现- (UIViewController *)childViewControllerForStatusBarStyle方法。将顶层的控制器返回。这样就可以了。
在分类中实现childViewControllerForStatusBarStyle
- (UIViewController*)childViewControllerForStatusBarStyle
{
returnself.topViewController;
}
然后在每个子制器里自己设置preferredStatusBarStyle