本以为设置状态栏很简单,但是每次用每次忘,每次查资料,干脆总结一下
首先需要明确,默认情况下状态的样式是:UIStatusBarStyleDefault
1.View controller-based status bar appearance 设置为YES 或者不设置(默认是YES)
此时通过代码直接设置状态栏是无效的
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
此时在info.plist里面设置状态栏也是无效的
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
如果希望不同页面,状态栏颜色不同,需要再每个页面重写preferredStatusBarStyle方法,返回当前页面的状态栏
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
如果该页面在导航栏控制器内,这样设置也不起作用的,因为系统只会调用navigationController的preferredStatusBarStyle方法,而navigationController默认返回UIStatusBarStyleDefault。此时我们需要自定义一个导航栏控制器,并重写他的preferredStatusBarStyle方法。
// 返回最顶部控制器的状态栏样式
- (UIStatusBarStyle)preferredStatusBarStyle {
UIViewController *topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
这样,在每个需要改变的页面,重写当前页面preferredStatusBarStyle并返回需要的样式就好了
此时如果应用大多数页面状态栏都是白色,可以自定义一个基类,重写preferredStatusBarStyle返回UIStatusBarStyleLightContent,其他的都集成该类。
2.View controller-based status bar appearance 设置为NO
此时状态栏默认样式,是由info.plist文件中的Status bar style来决定的,不设置默认是UIStatusBarStyleDefault黑色。也可以通过代码设置
// View controller-based status bar appearance为NO 是有效
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
如果想要在不同的页面显示不同的样式,每次页面显示的时候设置,页面消失的时候还原
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}