【发布时间】:2020-12-02 06:38:06
【问题描述】:
我搜索了很多,但在 StackOverflow 或其他任何地方都没有找到与我相同的问题。
设置
-
Info.plist-
ViewControllerBasedStatusBar设置为YES -
StatusBarStyle设置为.lightContent -
UserInterfaceStyle设置为.light(应用不支持.dark模式)
-
- 每个
UIViewController都有自己的preferredStatusBarStyle实现:override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent } -
UITabBarController有extension:open override var childForStatusBarStyle: UIViewController? { return selectedViewController } -
UINavigationController有extension:override open var childForStatusBarStyle: UIViewController? { return topViewController }
问题
自从 iOS 13 发布以来,我的状态栏逻辑被破坏了,我不明白为什么。在 iOS childForStatusBarStyle 永远不会被调用,并且每个 viewController 都有一些随机样式。
更新:由于 iOS 13 发布状态的样式基于 UserInterfaceStyle 设置全局,而不是基于 preferredStatusBarStyle(正确设置)UITabBarController -> UINavigationController - > UIViewController 层次结构。
问题
问题是如何解决这个问题?这个逻辑有什么悄悄改变吗? (检查了许多文章和更新日志)
复制
按照上述设置,我已经能够在示例项目中重现该错误。
Here我有一个包含如下视图层次结构的github项目:
CustomTabBarController
- UINavigationController
- CustomViewController
- CustomViewController
现在,当你选择第一个标签应用程序有深色风格的状态栏时,当第二个选择浅色风格时。 CustomViewController 将preferredStatusBarStyle 设置为.lightContent。
更多:
- Xcode:版本 11.5 (11E608c)
- 设备:iPhone 8 模拟器
- iOS:版本 13.5
P.S:我已准备好并会提供有关该主题的更多详细信息,请随时要求我这样做。项目运行了 2 年多,这样的事情真的要调试了 :)
【问题讨论】:
-
请发minimal reproducible example 并发布。
-
@matt 好的,我会尝试创建示例项目
-
谢谢,这将是一个很大的帮助。
-
是的,看起来像一个错误,让我们向 Apple 提交反馈。
-
@matt 我刚刚添加了带有描述问题的示例项目。可以看看吗?
标签: ios swift ios13 statusbar uistatusbar