运行时隐藏/显示状态栏iOS 9+

Runtime Hide / Show Status Bar iOS 9+

我有一个应用程序,其中隐藏/显示状态栏并即时切换其样式很重要。以前,使用以下调用非常容易:

[[UIApplication sharedApplication] setStatusBarHidden:NO];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];

但它们已被弃用,我不太了解新方法的工作原理。我能够通过将以下行添加到 plist 来设置样式和初始可见性:

 View controller-based status bar appearance = YES

然后将以下方法添加到我的视图控制器中:

 - (UIStatusBarStyle)preferredStatusBarStyle
 {
     return UIStatusBarStyleDefault;
 }

 - (BOOL)prefersStatusBarHidden
 {
     return NO;
 }

这在整个视图控制器上工作正常(作为初始化视图时调用的静态设置),但我无法即时更改它们,这正是我需要的。

我怎样才能做到这一点?

我不想回答我自己的问题,但在深入挖掘之后,我发现了如何手动调用该方法。首先,我创建了一个 BOOL 变量,它可以动态切换,然后在 prefersStatusBarHidden 方法中返回。

 - (BOOL)prefersStatusBarHidden
 {
     return isStatusBarHidden;
 }

然后,每当我想要 hide/show 状态栏时,我都会更改 isStatusBarHidden 的值并强制视图检查其状态栏是否需要像这样更新:

 isStatusBarHidden = NO;
 [self setNeedsStatusBarAppearanceUpdate];

我在 运行 iOS9 及更高版本的设备上完美运行。