1.
https://www.jianshu.com/p/684751c14735
2.status bar
UIViewControllerBasedStatusBarAppearance = NO时:
UIApplication 的setStatusBarStyle方法生效:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
viewController的preferredStatusBarStyle方法无效:
- (UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
UIViewControllerBasedStatusBarAppearance = YES时:
UIApplication 的setStatusBarStyle无效。
viewController的preferredStatusBarStyle方法有效。
https://blog.csdn.net/gaoyp/article/details/17755295
如果你使用了系统的UINavigationController,且它的navigationBar没有被隐藏的话,它的rootController及之后push的controller的preferredStatusBarStyle方法不会被调用(其他两个方法还是会被调用);
UINavigationController会根据自己navigationBar的barStyle,来决定StatusBarStyle的值;
如果你设置了 navagationBarStyle 从Default->Black 或者 self.navigationController.navigationBarHidden = YES;
那preferredStatusBarStyle就会被正常调用了
https://blog.csdn.net/gxp1032901/article/details/41879557
最后发现是因为这次在ViewController中加入了UINavigationController使得导航控制器不会将preferredStatusBarStyle这个方法的调用转给它的子视图,而是由导航控制器本身进行管理,所以如果在包含UINavigationController的ViewController中实现preferredStatusBarStyle方法是无论如何都不会调用的。这种情况我们就需要用另外的方法修改状态栏的颜色了,在导航控制器的navigationBar中有barStyle这个属性,这个属性决定了状态栏文本颜色是黑色还是白色,默认是黑色的(UIBarStyleDefault),如果你想把状态栏文本颜色修改为白色,那么你就需要把barStyle修改为UIBarStyleBlack,导航条默认是浅色的,所以状态栏文本颜色为黑色,如果把导航条的barStyle改为深色,那么状态栏文本颜色就会变为白色,代码如下:
/** 将状态栏文本颜色设置为白色 */
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
/** 将状态栏文本颜色设置为黑色 ,默认就是黑色 */
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
https://www.jianshu.com/p/1d2e58897daa
https://www.colabug.com/1753279.html