我有一个自定义颜色导航栏,我需要确保状态栏颜色设置为白色。在 iOS 13 之前,这很容易做到,这是 UIViewController 中的一个代码片段,它可以很好地完成这项工作:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.barStyle = .black
}
我在 iOS 13 中面临的问题是我现在需要使用 NavigationBar 的 standardAppearance 和 scrollEdgeAppearance 来撤消新 UIKit 中的强制背景透明度。虽然我能够使用 UINavigationBarAppearance() 将 NavigationBar 的文本和背景颜色恢复为我需要的颜色,但它会将我的状态栏颜色恢复为黑色。这是一个重现该问题的简单示例:
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.navigationBar.standardAppearance = UINavigationBarAppearance() // <--- This is the line that reverts my status bar colour back to black
self.navigationController?.navigationBar.barStyle = .black
}
我不确定这是我做错了什么还是这是一个 UIKit 错误?
编辑
最后设法通过将以下两个属性添加到我的 Info.plist 文件来解决此问题:
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
最佳答案
暗模式的更改包括新的 UIView
和 UIViewController
名为 overrideUserInterfaceStyle
的属性.这是指示您想要特定的明/暗样式而不是我们响应当前暗模式状态的默认行为的首选方式。
如果您在导航栏或导航 Controller 上设置此选项,那么您应该得到您期望的行为(假设您希望到处都是亮或暗)。如果您需要更多控制,那么子类 UINavigationController
可能更有意义。改变其行为(例如,通过覆盖 childViewControllerForStatusBarStyle
并返回顶 View Controller )。
关于iOS 13 : NavigationBar BarStyle is ignored when using UINavigationBarAppearance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468600/