状态栏是一件很坑爹的事情,一不弄不好就会出现你不想要的结果。
修改状态栏的颜色
iOS 9
修改状态栏的颜色在 iOS 9 之前我们会这样做:
- 首先在.plist文件中设置 UIViewControllerBasedStatusBarAppearanced 的值为NO。
- 然后通过以下代码去控制状态栏的颜色
+ (void)statusBarColorWhite:(BOOL)isWhite
{
[[UIApplication sharedApplication] setStatusBarStyle:isWhite ? UIStatusBarStyleLightContent : UIStatusBarStyleDefault];
}
这种方式操作起来比较简便。
iOS 9 之后
在 iOS 9 之后上面的方式已经被遗弃了。虽然还可以用,但是会出现一个warnning,一个黄色的感叹号会使我们这些有强迫症患者的人感到非常难受,尽管我的工程中已经有536个warnning了。
新的方法比较麻烦,但还是有道可循的。下面就是我总结的方法:
- 首先,你要自己判断当前的 viewController 是否有 navigationController。
- 如果当前 viewController
不在navigationController 中。
这时,要修改状态栏的颜色只需要在这个viewController中重写 - (UIStatusBarStyle)preferredStatusBarStyle 即可。- (UIStatusBarStyle)preferredStatusBarStyle { return UIStatusBarStyleDefault/UIStatusBarStyleLightContent; } - 如果当前 viewController
在navigationController中。
这时,要修改状态栏颜色就不能用上边的方法了。因为你试过后就会发现这种情况下你在进入 viewController 的过程中并没有进入到 preferredStatusBarStyle 方法里面去。下面是可行的方法:- 如果要设置整个 navigationController,即整个 navigationController 的状态栏颜色都是统一的,要在 navigationController 中去重写 - (UIStatusBarStyle)preferredStatusBarStyle。
- 如果要单独设置某个 viewController 的状态栏颜色,那么就需要在 viewController 的 viewWillAppear 中去设置:
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationController.navigationBar.barStyle = UIStatusBarStyleDefault;//设置状态栏为黑色 self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;//设置状态栏为白色 }
设置隐藏、显示状态栏
- 如果你在 .plist 文件中设置了 UIViewControllerBasedStatusBarAppearanced 为NO。那么你需要使用以下方法来设置:
这种设置方法是全局设置的,如果在某特定页面隐藏了状态栏,在需要显示的地方就要再设置一次显示状态栏。[[UIApplication sharedApplication] setStatusBarStyle:(UIStatusBarStyle)];
这种方法会有一个warnning。 这种设置方式可能会导致一个系统导航栏飞出屏幕之外的Bug。(别问我为什么知道...) - 如果你没有在 .plist 文件中设置 UIViewControllerBasedStatusBarAppearanced 为NO。那么要在 viewController 中重写 prefersStatusBarHidden 来进行设置:
- (BOOL)prefersStatusBarHidden { return YES; }
小结:以上两种操作中都同意使用第二种方法会更省事。