- 前提背景
info.plist文件中有个一项:View controller-based status bar appearance
:
当这里的值分别为YES
,则以 ViewController 的设置为准,即通过preferredStatusBarStyle
来设置状态栏。而 ViewController 对 status bar 的设置优先级高于 application 的设置。
- 预设好状态栏配置
#pragma mark - 状态栏
- (BOOL)prefersStatusBarHidden
{
return NO;
}
- (UIStatusBarStyle)preferredStatusBarStyle
{
CMConfig *config =[CMConfig sharedInstance];
if (config.isNightMode) {
return UIStatusBarStyleLightContent;
}
return UIStatusBarStyleDefault;
}
- 激活状态栏更新
- (void) changeStatusMode{
[self setNeedsStatusBarAppearanceUpdate];
}
- 跟视图控制器需要重写一下,意思是设置以可见子视图的设置为准:
-(UIStatusBarStyle)preferredStatusBarStyle
{
return [self.visibleViewController preferredStatusBarStyle];
}
- (BOOL)prefersStatusBarHidden {
return [self.visibleViewController prefersStatusBarHidden];
}
- 手动调用状态栏更新
[self preferredStatusBarStyle];
[self prefersStatusBarHidden];
注意的是,有个文献说不能如上手动调用,但经笔者验证,还是可以这样手动调用的。这个文献是https://blog.csdn.net/baohanqing/article/details/51619853。读者可以自行思考。