尝试更改 UIStatusBar 色调颜色

Attempting to Change the UIStatusBar Tint Color

我正在尝试更改特定 UIViewController 中的 UIStatusBar 色调颜色。

这是我的代码:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

    self.setNeedsStatusBarAppearanceUpdate()

}

什么都没发生。

在 UINavigationController 上,preferredStatusBarStyle 未被调用,因为它的 topViewController 优于自身。因此,要在 UINavigationController 上调用 preferredStatusBarStyle,您需要更改其 childViewControllerForStatusBarStyle。

为一个 UINavigationController 做:

class MyRootNavigationController: UINavigationController {
    override var preferredStatusBarStyle: UIStatusBarStyle {
        return .lightContent
    }
    override var childViewControllerForStatusBarStyle: UIViewController? {
        return nil
    }
}

您可以为 UINavigationController 添加扩展名:

extension UINavigationController {
    open override var childForStatusBarStyle: UIViewController? {
        return visibleViewController
    }
}

然后对于您想要浅色状态栏(白色时间、图标等)的视图控制器,然后覆盖 preferredStatusBarStyle:

override var preferredStatusBarStyle: UIStatusBarStyle {
    return UIStatusBarStyle.lightContent
}

对于深色状态栏,您无需执行任何操作。

您可能需要在 info.plist

中添加值为 "YES" 的 "View controller-based status bar appearance"