一般我们开发的时候,app运行起来,状态栏的文字颜色是黑色的。但是有些项目却要求状态栏颜色要白色,上网搜索了一下,测试并总结了一下好用的方法:(测试环境,xcode8,ios10)
方法一:
在info.plist文件上添加两个字段:
第一个:key为 "View controller-based status bar appearance",类型为"Boolean",value为:"NO";
第二个:key为"Status bar style",类型为"String",value为"Opaque black style"(白色)。
(ps:第二个字段的值是可以选择的,除了将值设置为Gray style (default)时文字为黑色之外,其他都为白色。除此之外,还可以直接手动输入系统的枚举类型("UIStatusBarStyle")的值:)
上个图:
C5F663D3-1662-4DC5-8924-486D733924A8.png
"UIStatusBarStyle"的定义如下:(四个值中,设置为第一个值之后文字为黑色,其他三个都为白色,系统默认为黑色)
typedef NS_ENUM(NSInteger, UIStatusBarStyle) {
UIStatusBarStyleDefault = 0, // 黑色字体
UIStatusBarStyleLightContent NS_ENUM_AVAILABLE_IOS(7_0) = 1, // 白色字体
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;
方法二:(据说ios9之后都用这个方法了)
首先,在info.plist文件上添加一个字段:
字段的key为 "View controller-based status bar appearance",类型为"Boolean",value为:"YES";(和上面的方法的值不一样)
接着,在你所要设置的UINavigationController的rootViewController中加上下面的代码:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
或者说你自定义了一个NavigationController继承自系统的NavigaitionController,那么在你自己自定义的Nav中添加上面的代码也可以。代码中函数返回的值参考方法一中贴出的枚举"UIStatusBarStyle"的值。
还有一点,ios9以前设置的方法。
具体和方法一大同小异,只是用代码实现的罢了。
首先,在info.plist文件上添加一个字段:
字段的key为 "View controller-based status bar appearance",类型为"Boolean",value为:"NO";
之后在AppDelegate中添加下面代码:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
(ps:当info.plist文件中"View controller-based status bar appearance"设置为"YES"的时候,这个方法会失效,只能采用方法二)
这个方法ios9以后被弃用了,同时弃用的还有含动画的方法:
@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;
最后,讨论一下"View controller-based status bar appearance"这个字段,这个大概是用来确定是用什么方法来设置状态栏的文字颜色。
当值为"YES"的时候,就需要在ViewController里面重写方法-(UIStatusBarStyle)preferredStatusBarStyle来设置。
当值为"NO"的时候,就用 [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];来设置,或者在info.plist文件中设置。
如果有错误,欢迎指出,感激灰常!
网友评论