如何解决iOS 13状态栏样式无效从未调用childForStatusBarStyle
我一直在搜索很多东西,但是没有发现与我在 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
附言::我已经准备好了,并将提供有关该主题的更多详细信息,请不要犹豫。项目运行了2年多,实际上是要调试的东西:)
解决方法
对于那些需要大量时间使用.barStyle
的用户,有一种解决方法。子类UINavigationController
,然后每次setNeedsStatusBarAppearanceUpdate
更改时调用viewControllers
。
示例代码
class WorkaroundNavigationController: UINavigationController {
override var childForStatusBarStyle: UIViewController? {
return topViewController
}
override var viewControllers: [UIViewController] {
didSet { setNeedsStatusBarAppearanceUpdate() }
}
}
,
在导航控制器情况下,状态栏样式(亮/暗)与导航栏样式无关,并且从未依赖于任何其他样式。在项目的自定义标签栏中添加以下行:
let bugVC = UINavigationController(rootViewController: ViewController())
bugVC.navigationBar.barStyle = .black // *
现在,在选项卡栏控制器的两个子控件中,状态栏文本均为白色。 (然后如果您不喜欢导航栏的颜色,它是默认的黑色,则可以对其进行更改;这不会影响状态栏的行为。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。