今天在ViewController中使用preferredStatusBarStyle方法修改顶部状态栏颜色的时候无效,还是默认的黑色,设置断点发现并没有执行该方法,之前一直使用这个方法修改也没有出现这种情况。
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end
最后发现是因为这次在ViewController中加入了UINavigationController使得导航控制器不会将preferredStatusBarStyle这个方法的调用转给它的子视图,而是由导航控制器本身进行管理,所以如果在包含UINavigationController的ViewController中实现preferredStatusBarStyle方法是无论如何都不会调用的。这种情况我们就需要用另外的方法修改状态栏的颜色了,在导航控制器的navigationBar中有barStyle这个属性,这个属性决定了状态栏文本颜色是黑色还是白色,默认是黑色的(UIBarStyleDefault),如果你想把状态栏文本颜色修改为白色,那么你就需要把barStyle修改为UIBarStyleBlack,导航条默认是浅色的,所以状态栏文本颜色为黑色,如果把导航条的barStyle改为深色,那么状态栏文本颜色就会变为白色,代码如下:
/** 将状态栏文本颜色设置为白色 */
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
/** 将状态栏文本颜色设置为黑色 ,默认就是黑色 */
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
还有,假如你就是想用preferredStatusBarStyle修改的话,那就只能将导航条隐藏了。不过除非特殊情况,导航条还是需要使用不能隐藏的,这样就用上面的方法修改比较合适。