相关疑难解决方法(0)

iOS 13:使用 UINavigationBarAppearance 时忽略 NavigationBar BarStyle

我有一个自定义颜色导航栏,我需要确保状态栏颜色设置为白色。在 iOS 13 之前,这很容易做到,这里是 UIViewController 的代码片段,它做得很好:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.barStyle = .black
}
Run Code Online (Sandbox Code Playgroud)

我在 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
}
Run Code Online (Sandbox Code Playgroud)

我不确定这是我做错了什么还是这是一个 UIKit 错误?

编辑

最后通过将以下两个属性添加到我的 Info.plist 文件来解决问题:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleLightContent</string>
Run Code Online (Sandbox Code Playgroud)

Info.plist 属性

uinavigationbar uikit ios swift ios13

8
推荐指数
2
解决办法
2500
查看次数

标签 统计

ios ×1

ios13 ×1

swift ×1

uikit ×1

uinavigationbar ×1