gpt4 book ai didi

iOS 13 状态栏样式无效(从未调用过 childForStatusBarStyle)

转载 作者:行者123 更新时间:2023-12-01 19:30:05 24 4
gpt4 key购买 nike

我一直在搜索,但没有在 StackOverflow 或其他任何地方找到与我相同的问题。


设置

  • Info.plist
    • ViewControllerBasedStatusBar 设置为 YES
    • StatusBarStyle 设置为 .lightContent
    • UserInterfaceStyle设置为.light(应用不支持.dark模式)
  • 每个 UIViewController 都有自己的 preferredStatusBarStyle 实现:
    override var preferredStatusBarStyle: UIStatusBarStyle {
    return .lightContent
    }
  • UITabBarController扩展名:
    open override var childForStatusBarStyle: UIViewController? {
    return selectedViewController
    }
  • UINavigationController扩展名:
    override open var childForStatusBarStyle: UIViewController? {
    return topViewController
    }

问题

自从 iOS 13 发布以来,我的状态栏逻辑被打破了,我不明白为什么。在 iOS <= 12.4 上一切正常。 childForStatusBarStyle 永远不会被调用,每个 viewController 都有一些随机样式

更新:由于 iOS 13 发布的状态具有基于 UserInterfaceStyle 设置全局的样式,而不是基于 preferredStatusBarStyle(具有适当的设置)以防万一UITabBarController -> UINavigationController -> UIViewController 层次结构。


问题

问题是如何解决这个问题?在这个逻辑中是否有什么悄无声息地改变了? (检查了许多文章和变更日志)


复制

我已经能够通过如上所述设置所有内容来重现示例项目中的错误。

Here我有一个包含 View 层次结构的 github 项目,如下所示:

CustomTabBarController
- UINavigationController
- CustomViewController
- CustomViewController

现在,当你选择第一个tab app时有深色风格的状态栏,当第二个选择浅色风格的时候。 CustomViewController 已将 preferredStatusBarStyle 设置为 .lightContent

更多:

  • Xcode:版本 11.5 (11E608c)
  • 设备:iPhone 8 模拟器
  • iOS:版本 13.5

P.S:我已经准备好并将提供有关该主题的更多详细信息,请不要犹豫让我这样做。项目运行了 2 年多,这样的事情真的需要调试 :)

最佳答案

对于那些认为使用 .barStyle 需要时间的人来说,有一个解决方法。子类 UINavigationController,然后每次 viewControllers 更改时调用 setNeedsStatusBarAppearanceUpdate


示例代码

class WorkaroundNavigationController: UINavigationController {
override var childForStatusBarStyle: UIViewController? {
return topViewController
}

override var viewControllers: [UIViewController] {
didSet { setNeedsStatusBarAppearanceUpdate() }
}
}

关于iOS 13 状态栏样式无效(从未调用过 childForStatusBarStyle),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63377780/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com