两者是等效的!并且两者的状态是同步的。
二、状态栏样式
先看看都有哪些样式(解释看注释)
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
//默认样式,黑字透明状态栏,适合用于背景色为亮色的页面
UIStatusBarStyleDefault = 0, // Dark content, for use on light backgrounds
//白字透明状态栏,适合用于背景色为暗色的页面
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // Light content, for use on dark backgrounds
// iOS7.0以前黑底白字,iOS7以后跟UIStatusBarStyleLightContent效果一样
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
// iOS7.0以前启动页为灰底白字,iOS7以后跟UIStatusBarStyleLightContent效果一样
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
如何设置状态栏样式
// Setting the statusBarStyle does nothing if your application is using the default UIViewController-based status bar system.
@property(readwrite, nonatomic) UIStatusBarStyle statusBarStyle
NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;
- (void)setStatusBarStyle:(UIStatusBarStyle)statusBarStyle animated:(BOOL)animated
NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController preferredStatusBarStyle]") __TVOS_PROHIBITED;
同样iOS9以后这些方法被禁用了,苹果推荐在具体的viewController中Use -[UIViewController preferredStatusBarStyle]
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
注意:我们通常使用的viewController都是嵌套在UINavigationController中使用的,此时在viewController中使用- (UIStatusBarStyle)preferredStatusBarStyle;函数会发现设置并没有生效。
系统也给我们提供了一个函数- (UIViewController *)childViewControllerForStatusBarStyle,也可以解决这个问题,后面会讲。
三、背景色
iOS7以后默认情况下状态栏的背景为透明的,一种办法是我们自己写一个UIView作为背景添加到状态栏下面,这样就可以随意设置状态栏的颜色了。
另一种方法就是通过设置navigationBar的setBarTintColor颜色来改变状态栏颜色
UIViewController中其他有关状态栏的函数
preferredStatusBarUpdateAnimation函数
- (UIStatusBarAnimation)preferredStatusBarUpdateAnimation
NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED; // Defaults to UIStatusBarAnimationFade
如果想在当前已经显示的UIViewController中更改状态栏的样式的话,需要调用以上函数。调用该函数后,系统会主动调用










