设置statusBar的前景部分
状态栏类型:
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
UIStatusBarStyleBlackTranslucent NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 1,
UIStatusBarStyleBlackOpaque NS_ENUM_DEPRECATED_IOS(2_0, 7_0, "Use UIStatusBarStyleLightContent") = 2,
} __TVOS_PROHIBITED;
状态栏修改方式:
-
plist设置
在plist添加一行
UIStatusBarStyle
(或Status bar style
),值可以是- UIStatusBarStyleDefault
- UIStatusBarStyleLightContent
设置后app启动的launch页显示的时候,statusBar的样式就是上面plist设置的风格.
-
代码设置
-
iOS 2.0 ~ 9.0
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];
-
-
iOS 7.0 ~
Tag:
UIViewcontroller或者UINavigationController都是控制器,下面统一叫它们控制器。
状态栏statusBar是属于UIApplication的一个UI,也就是说一个app只有一个状态栏,并不是每一个控制器都拥有的属性,所以在控制器中通过
preferredStatusBarStyle
方法修改的状态栏样式不一定有用,只有当该控制器是当前app的控制者的时候,状态栏的样式才会听命于这个控制器。 一般我们都是写一个UINavigationController作为window的rootViewController,其它的控制器都是在UINavigationController的管理下,app的控制权一直在UINavigationController手中,所以状态栏的样式只听命于这个UINavigationController。
由此我们得出一种控制状态栏风格的方法,自定义一个UINavigationController,在自定义UINavigationController中实现
preferredStatusBarStyle
方法指定状态栏样式,只要更改这个自定义类中preferredStatusBarStyle
方法里的值,就能更改状态栏的风格。 如果要让这个UINavigationController管理的所有控制器也能通过
preferredStatusBarStyle
方法更改状态栏风格,可以通过childViewControllerForStatusBarStyle
方法出借更改权限给指定的控制器,代码如下:- (UIViewController *)childViewControllerForStatusBarStyle{ return self.topViewController; }
这样在UINavigationController管理栈中的栈顶控制器就有权限控制器状态栏了。
除此之外,我们也可以用模态跳转的方式来控制器与控制器之间的跳转,这种情况下每个控制器都有权限控制状态栏风格。
[self presentViewController:vc animated:YES completion:^{}];
指定当前控制器的状态栏风格- (UIStatusBarStyle)preferredStatusBarStyle;
指定当前控制器的子控制器读取谁的状态栏样式,当返回nil时,默认读取自身设置的状态栏样式- (UIViewController *)childViewControllerForStatusBarStyle;
调用该方法,调用当前拥有控制权的控制器的
-preferredStatusBarStyle
方法刷新状态栏风格- (void)setNeedsStatusBarAppearanceUpdate;
设置statusBar的【背景部分】
-
iOS 7.0之前 通过
tintColor
修改 -
iOS 7.0之后 通过
barTintColor
修改
如果调用了以下方法,barTintColor
将无效
- (void)setBackgroundImage:(nullable UIImage *)backgroundImage forBarPosition:(UIBarPosition)barPosition barMetrics:(UIBarMetrics)barMetrics
NS_AVAILABLE_IOS(7_0) UI_APPEARANCE_SELECTOR;
```
网友评论