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。读者可以自行思考。