iOS StatusBar控制
info.plist 有两个属性
Status bar is initially hidden 应用启动时是否隐藏状态栏 YES 隐藏 , NO显示
View controller-based status bar appearance 是否由控制器 控制状态栏 YES交给控制器控制,NO UIApplication 控制
总结一下:
1、如果用 全局控制
info.plist 要设置Status bar is initially hidden=NO(或者不添加该属性) 且 View controller-based status bar appearance =NO 后者必须添加且必须设为 NO
2、但是如果启动图的那一帧就是不想要statusBar 就只能局部控制 也就是两个值都设为YES
3、控制器通过重写 -(UIStatusBarStyle)preferredStatusBarStyle方法来显示状态栏
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleLightContent;
}
但是,如果是导航控制器的话,要分情况
1)如果导航栏显示 的话 控制器的-(UIStatusBarStyle)preferredStatusBarStyle方法不会执行,而是执行导航栏的该方法,这时候要在导航控制器下重写该方法
- (UIStatusBarStyle)preferredStatusBarStyle {
UIViewController *topVC = self.topViewController;
return [topVC preferredStatusBarStyle];
}
2)导航栏如果是隐藏状态的话 自控制器会执行 -(UIStatusBarStyle)preferredStatusBarStyle该方法
4、如果是控制器控制状态栏,- (BOOL)prefersStatusBarHidden方法不受导航栏限制,也就是说,无论导航栏是否隐藏,自控制器的该方法都会执行。
5、如果一个页面要根据情况变化preferredStatusBarStyle ,可用- (void)setNeedsStatusBarAppearanceUpdate刷新显示。
6、修改status背景色
1)
// 这个方法是设置导航栏背景颜色,状态栏也会随之变色
[self.navigationController.navigationBar setBarTintColor:[UIColorredColor]];
2)
- (void)setStatusBarBackgroundColor:(UIColor*)color {
UIView*statusBar = [[[UIApplication sharedApplication] valueForKey:@"statusBarWindow"] valueForKey:@"statusBar"];
if([statusBar respondsToSelector:@selector(setBackgroundColor:)]) {
statusBar.backgroundColor = color;
}
}
参考链接