iOS7之后 改变状态栏颜色方法
本文旨在针对ViewController单个设定状态栏的颜色,全程可以自定义设置。
- 默认的黑色 UIStatusBarStyleDefault
- 白色 UIStatusBarStyleLightContent
iOS7之后修改状态可以通过两种方式:
1.
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]
2.
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
下面我介绍两种方式具体的使用方法
- 第一种方法,通过 [UIApplication sharedApplication] 设置
在iOS7之后,系统将状态栏交给Controller管理,如果要使用这种方法,需要配置.plist文件,添加一个key
View controller-based status bar appearance
控制器的状态栏 由控制器管理
并且设置对应的Value为 NO
代表的意思就是 状态栏不是由控制器来管理,而是由 UIApplication 来管理。
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]
这样你在代码中使用这个方法就会起到作用了。
当然了这个key默认为YES,也就是说默认是控制器来管理的
这里着重介绍的第二种方法:
- 全局全程自定义设置当前控制器ViewController的状态栏颜色
一般来说iOS普遍的结构是使用 UINavigationController 来搭建整体的框架结构,这样的话,在某个单独的UIViewController 重写
- (UIStatusBarStyle)preferredStatusBarStyle;
当前控制器的这个方法,并不会执行。
执行的实际上还是当前控制器对应的UINavigationController的状态栏的颜色。
解决方案就是,在UIViewController对应的UINavigationController重写
- (UIStatusBarStyle)preferredStatusBarStyle;
也就是说在自定义的UINavigationController的子类,在子类中重写这个方法:
- (UIStatusBarStyle)preferredStatusBarStyle{
//获取当前UINavigationController最上面的UIViewController,也就是说获取最当前的控制器
UIViewController *topVC = self.topViewController;
/*返回的是当前控制器UIViewController对应的- (UIStatusBarStyle)preferredStatusBarStyle;
*/
return [topVC preferredStatusBarStyle];
}
这样,通过这个方法,在显示状态栏的时候,就会显示所有控制器对应 - (UIStatusBarStyle)preferredStatusBarStyle; 这个方法返回的状态栏的类型了。
这时候,我们只需要在需要改变状态栏颜色的控制器,重写这个方法,就会调对应的状态栏颜色了
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
OK,至此为止,你就可以任性的自定义自己所有控制器,对应的状态栏颜色了。
当然,为了更好的去管理所有的控制器,写一个UIViewController的子类,然后你所有的控制器 继承自这个子类,在这个子类里重写
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
实现想怎么改,就怎么改。
这么好的文章,一定要 顶!顶!顶!顶!