preferredStatusBarStyle 未在 iOS 13 和其他系统中调用

Kul*_*eep 6 statusbar ios swift ios13

UITabBar我的应用程序中有多个,有些ViewController具有白色状态栏,有些ViewController具有黑色状态栏。

我的 info.plist

View controller-based status bar appearanceYES

我的 Viewcontroller 有以下代码。

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .default //or return . lightContent
}
Run Code Online (Sandbox Code Playgroud)

preferredStatusBarStyle永远不会被调用。

我也在我的控制器中写了下面的行,viewDidLoad但仍然没有被调用。

self.setNeedsStatusBarAppearanceUpdate()

我也多次 controller-based status bar appearance改为YES&&NO进行检查,但对我没有任何帮助。

我也尝试过以下解决方案和其他 stackoverflow 答案,但没有任何帮助。

在 iOS 13 上不尊重 preferredStatusBarStyle

preferredStatusBarStyle var 在 iOS12 中不起作用?

编辑

我试过下面的代码,它返回给我topViewController,它会调用preferredStatusBarStyle那个ViewController

extension UINavigationController {
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
}
Run Code Online (Sandbox Code Playgroud)

所以一旦topViewController找到它就会调用preferredStatusBarStyle那个特定的ViewController

但问题是它没有在内部被调用UITabBarController-> UINavigationController-> UIViewController

要求

我有 2 个不同的TabBarController.

第一个TabBarControllerstatusBarStyle 是.lightContent.

第二TabBarControllerstatusBarStyle是.lightContent.default在不同的控制器。

当我更改为 2nd TabBarController 时,它将调用preferredStatusBarStyle2ndTabBarController并且所有ViewControllerstatusBarStyle 都会消失,.default但我的一些控制器 statusBarStyle 想要成为.ligthContent

我怎样才能做到这一点?

任何帮助将不胜感激。

谢谢

Kul*_*eep 2

我得到了解决方案。

输入下面的代码来查找topViewController.

extension UINavigationController {
    override open var childForStatusBarStyle: UIViewController? {
        return topViewController
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,一旦找到topViewController,下面的代码就会在您当前的情况下被调用ViewController,您可以statusBarStyle根据要求进行设置。

override var preferredStatusBarStyle: UIStatusBarStyle { }
Run Code Online (Sandbox Code Playgroud)

就我而言,我有 2 TabBar

第一个TabBar控制器是.lightContent,第二个TabBar控制器是 ,.default因此创建 2 UITabBarController。第一个用于.lightContent,第二个用于.default并放入preferredStatusBarStyle其中。

因此,当您位于UITabBarController子控制器时,您UITabBarController preferredStatusBarStyle会被呼叫并statusBarStyle根据您的设置样式设置子控制器。