iOS状态栏颜色控制UIStatusBarStyle

1、首先关注一个配置项,工程Info.plist文件中Key为View controller-based status bar appearance,这是一个BOOL值(从iOS7开始默认值为YES),如果为YES,则状态栏颜色由ViewController中的方法来决定,如果为NO则由UIApplication来决定!

2、如果为NO,可以在代码中的任何一个地方使用以下代码来修改(好像从iOS9以后该方法不再生效)

1
2
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:YES];

3、如果为YES,需要关注以下3个方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/* 该方法在需要修改状态栏的当前控制器中重写,返回UIStatusBarStyle即为当前状态栏的样式,
   默认为UIStatusBarStyleDefault*/
- (UIStatusBarStyle)preferredStatusBarStyle;
 
/* 该方法辅助上面方法来实现状态栏的变化,因为如果当前控制器处于导航控制器中,
   则系统会调用导航控制器的preferredStatusBarStyle方法,而不会调用当前控制器,
   如果何让系统调当前控制器的preferredStatusBarStyle方法呢?
   在导航控制器中实现该方法,返回你希望调用的控制器给系统,
   如return self.topViewController; */
- (UIViewController *)childViewControllerForStatusBarStyle;
 
/* 这个方法不需要重写,应用场景在于当前没有控制器切换时需要变化状态栏颜色,
   主动调用该方法立即刷新,相当于UIView的setNeedsDisplay方法*/
- (void)setNeedsStatusBarAppearanceUpdate;

参数链接:https://my.oschina.net/shede333/blog/304560

Leave a Reply