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;

    }

}

参考链接

https://www.jianshu.com/p/534054a8c897

你可能感兴趣的:(iOS StatusBar控制)