iOS系统的状态栏颜色通常有白色和黑色两种,对应的就是UIStatusBarStyleLightContent
和UIStatusBarStyleDefault
两种样式,改变状态栏的颜色就是通过设置不同的样式来实现的。
iOS为我们提供了两种设置状态栏的方式:统一设置app所有控制器的状态栏颜色和单独设置某个控制器的状态栏颜色
统一设置app所有控制器的状态栏颜色
首先,我们需要了解一下info.plist
里的View Controller-based status bar appearance
属性,如果将该属性设为YES,则控制器对状态栏的设置优先级最高,可以在控制器中对颜色进行单独修改,如果将该属性设为NO,则以启动图设置为准,即app内部所有控制器view上的状态栏都与启动图上的保持一致,当然我们还可以通过UIApplication
来进行管理。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
单独设置某个控制器的状态栏颜色
单独设置某个控制器的状态栏颜色首先需要将View Controller-based status bar appearance
属性设为YES,然后在对应的控制器中加入如下代码:
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
这里需要注意一点就是如果控制器在navigationController或tabBar中,通过自定义navigationController或tabBar重写如下方法:
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
如果随时更改状态栏颜色
有些特殊情况下,我们需要随时改变当前页面的状态栏颜色,这时就需要通过调用setNeedsStatusBarAppearanceUpdate
方法,这个方法会通知系统去调用当前控制器的preferredStatusBarStyle
方法,然后根据设置的方法来设置颜色。