iOS 的状态栏风格如何更改呢?iOS9及之前使用UIApplication 的setStatusBarStyle修改状态栏风格。遗憾的9之后,成为过时API。如何解决呢?
- 通过重写UIViewController的prefersStatusBarHidden与preferredStatusBarStyle控制各种页面状态栏风格
- plist配置文件中UIViewControllerBasedStatusBarAppearance属性设置为YES。
分几种情况。
1.根控制器为普通的页面控制器UIViewController
1
2
3
4
5
6
7
| - (BOOL)prefersStatusBarHidden {
return YES;
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
|
2.如果根控制器为导航控制器UINavigationController或UITabBarController
状态栏的风格会交由导航控制器管理,你只需要在容器 controller 中修改属性即可。
1
2
3
| - (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
|
3.同一页面UIViewController不同状态下的切换。
1
2
| @property (nonatomic, assign) UIStatusBarStyle statusBarStyle;
|
- 重写preferredStatusBarStyle方法。
1
2
3
| - (UIStatusBarStyle)preferredStatusBarStyle {
return self.statusBarStyle;
}
|
1
2
| self.statusBarStyle = UIStatusBarStyleLightContent;
[self setNeedsStatusBarAppearanceUpdate];
|
4.容器套容器。
通过重写childViewControllerForStatusBarStyle实现。指定是使用容器的状态栏风格或子页面的状态栏风格。
小结
1.修改状态栏风格需要考虑好页面层级的管理。
2.能复用窗口风格的尽量不要在子页面管理器中定义。