尝试更改 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"
我正在尝试更改特定 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"