我知道使用 UIKit
通常你只需覆盖:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
在您的UIViewController
(或UINavigationController
,如果存在)中。 它工作得很好。
但是,当我执行此操作时遇到了问题:
navigationController?.setNavigationBarHidden(true, animated: true)
现在,我看不到导航栏,这是预期的并且完全没问题。但是,我看到状态栏带有深色字体,这是意外的(我的导航 Controller 覆盖了上面的属性,并且当导航栏未隐藏时它可以正常工作)。我想看到状态栏,但我希望它是浅色字体。从此时起,导航 Controller 不会监听 preferredStatusBarStyle
,因此我无法以这种方式进行设置。
有没有办法在导航栏隐藏时显示.lightContent
状态栏样式..?
最终效果在屏幕截图中可见。如果放大,您可以在深色背景上看到深色字母和电池。
PS。请不要仅发布有关 SwiftUI(这里我们也支持旧版 iOS)和已弃用内容的答案。
最佳答案
找到了一个解决方案,让SDK在有导航 Controller 并且隐藏导航栏但显示状态栏时询问样式。
在UINavigationController
子类中,您需要重写
override var childForStatusBarStyle: UIViewController? { return viewControllers.last }
然后在这些 Controller 中,您可以指定
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
由于某种原因,如果导航栏隐藏,iOS SDK 不会向导航 Controller 询问 preferredStatusBarStyle
。但是,它仍然询问 childForStatusBarStyle
并且我们已经解决了问题:)
关于ios - 导航栏隐藏时的样式状态栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64006532/