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; |