iOS 13 : NavigationBar BarStyle is ignored when using UINavigationBarAppearance

标签 ios swift uikit uinavigationbar ios13

我有一个自定义颜色导航栏,我需要确保状态栏颜色设置为白色。在 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>

Info.plist properties

最佳答案

暗模式的更改包括新的 UIViewUIViewController名为 overrideUserInterfaceStyle 的属性.这是指示您想要特定的明/暗样式而不是我们响应当前暗模式状态的默认行为的首选方式。
如果您在导航栏或导航 Controller 上设置此选项,那么您应该得到您期望的行为(假设您希望到处都是亮或暗)。如果您需要更多控制,那么子类 UINavigationController 可能更有意义。改变其行为(例如,通过覆盖 childViewControllerForStatusBarStyle 并返回顶 View Controller )。

关于iOS 13 : NavigationBar BarStyle is ignored when using UINavigationBarAppearance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58468600/

相关文章:

php - 在 Symfony 之外验证 FOS 用户

swift - 无法将类型 'Pong.MenuVC' (0x1072ea808) 的值转换为 'Pong.GameViewController'

iOS 7 UITableView : is it a bug or is it me?

iphone - 使用 IB 创建的自定义单元在调用 reloadSections :withRowAnimation: 后隐藏

iphone - 在纵向 UITabBarController/UINavigationController 中显示横向 UIViewController

ios - 移动增强现实

ios - 使用 MKMapView、核心位置和核心数据

ios - 排序数组字母数字 Swift3

ios - 最高效的线程实现IOS

objective-c - 如何以@noescap 的方式在 Swift4 中使用带 block 的 Objective-C 函数?