希望大家可以關注一下我的個人博客 [
www.tunnycoder.com](
http://www.tunnycoder.com)
## **iOS 状态栏 StatusBar 的相关使用**
最近在改公司的就项目,遇到了引用一些第三方框架,但是框架修改了状态栏的属性。由于是旧项目,代码很是臃肿,导致改了多处才搞定。故此总结一下 iOS 状态栏 StatusBar 相关技巧。
<!--more-->
### **设置 StatusBar**
IOS7 之后,系统提供了 2 种管理状态栏的方式:
1> 通过 UIViewController 管理(每一个 UIViewController 都可以拥有自己不同的状态栏)
2> 通过 UIApplication 管理(一个应用程序的状态栏都由它来统一管理)
PS : IOS7 中,默认情况下,状态栏都是由 UIViewController 管理的。但是一般都是交给 UIApplication 来管理
#### **设置控制器管理 StatusBar /设置 UIApplication 管理状态栏**
首先得修改 Info.plist 的设置:
1. View controller-based status bar appearance YES; 则 View controller 对 status bar 的设置优先级高于 application 的设置;
2. View controller-based status bar appearance NO; 则以 application 的设置为准;
#### **UIApplication 中设置状态栏的相关方法**
直接在 Application 代理中设置:
```
application.statusBarHidden = NO;
application.statusBarStyle = UIStatusBarStyleLightContent;
```
#### **控制器中设置状态栏的相关方法**
状态栏的相关方法:(在控制器中实现)
```
//设置状态栏隐藏
- (BOOL)prefersStatusBarHidden
{
return YES;
}
//调整状态栏
- (UIStatusBarStyle)preferredStatusBarStyle
{
//Dark content, for use on light backgrounds
//在亮背景上显示黑内容
return UIStatusBarStyleDefault;
//Light content, for use on dark backgrounds
//在黑背景上,显示亮内容
// return UIStatusBarStyleLightContent;
}
```
### **控制器设置状态栏要注意的问题**
如果出现设置了```View controller-based status bar appearance YES;```,但是设置状态栏的相关方法不执行。则有可能的原因是: viewController 是添加到导航上的。
UINavigationController 不会将 preferredStatusBarStyle 方法调用转给它的子视图,而是由它自己管理状态,而且它也应该那样做.因为 UINavigationController 包含了它自己的状态栏。因此就算 UINavigationController 中的 viewController 实现了```preferredStatusBarStyle()```方法 也不会被调用。
因此如果控制器是添加在 UINavigationController 上的,它是基于它的```UINavigationBar.barStyle```属性。也就是说,如果 viewController 是在导航中的,想要改变状态栏文本颜色,那么需要通过代码:
```
//将 status bar 文本颜色设置为白色
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
//将 status bar 文本颜色设置为黑色 ,默认就是黑色
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
```
此外,如果 viewController 在导航控制器中,还想通过 preferredStatusBarStyle 方法设置状态栏文本颜色,那就只能隐藏导航栏了:
```
//隐藏导航栏后 系统会调用 preferredStatusBarStyle 方法
self.navigationController.navigationBarHidden = YES;
```
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
https://www.v2ex.com/t/241000
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.