View controller-based status bar appearance 设置为NO的情况
这种可以在工程的 General 中选择配置,当然也可以在代码中进行设置,使用如下的代码,想单独修改某一个控制器的,也是下面的代码
p.s. 这些方法在iOS9之后都废弃了,不建议使用
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
View controller-based status bar appearance 设置为YES的情况
未使用navigation bar / 隐藏了navigation bar
这种情况 只要在当前控制器里重写下面的方法就可以了
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
使用了navigation bar
重写这个方法是不起作用的
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
这个时候有两种选择,一是在对应的导航控制器中设置好颜色,方法也是重写preferredStatusBarStyle,另一种是使用下面的代码修改,如果只是想修改一个单独的页面,可以在生命周期的方法中设置和重置,比如viewWillAppear 和 viewWillDisappear 中设置
[self.navigationController.navigationBar setBarStyle:UIBarStyleBlack];
隐藏状态栏
在当前控制器里重写下面方法
- (BOOL)prefersStatusBarHidden {
return self.hideStatusBar;
}
如果使用了变量控制隐藏状态,在变量值修改之后,要调用下面方法
self.hideStatusBar = YES;
[self setNeedsStatusBarAppearanceUpdate];
下面这种方式会失效
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationNone];