iOS的状态栏风格更改

iOS 的状态栏风格如何更改呢? iOS9及之前使用UIApplicationsetStatusBarStyle修改状态栏风格。遗憾的9之后,成为过时API。如何解决呢?

  • 通过重写UIViewControllerprefersStatusBarHiddenpreferredStatusBarStyle控制各种页面状态栏风格
  • plist配置文件中UIViewControllerBasedStatusBarAppearance属性设置为YES。

分几种情况。

1.根控制器为普通的页面控制器UIViewController

1
2
3
4
5
6
7
8

- (BOOL)prefersStatusBarHidden {
    return YES;
}

- (UIStatusBarStyle)preferredStatusBarStyle {
    return UIStatusBarStyleLightContent;
}

2.如果根控制器为导航控制器UINavigationController或UITabBarController

状态栏的风格会交由导航控制器管理,你只需要在容器 controller 中修改属性即可。

1
2
3
4

- (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.能复用窗口风格的尽量不要在子页面管理器中定义。