我知道使用UIKit
通常只覆盖:
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
在您的UIViewController
(或UINavigationController
,如果存在)中的。 效果很好。
但是,执行此操作时会遇到问题:
navigationController?.setNavigationBarHidden(true, animated: true)
现在,我看不到导航栏,这是预料之中的,并且非常正常。但是,我看到状态栏带有深色字体,这是意外的(我的导航控制器覆盖了上面的属性,并且在未隐藏导航栏时它可以正常工作)。我想查看状态栏,但是我希望它以浅色字体显示。从这一点来看,导航控制器不会监听preferredStatusBarStyle
,因此我无法以这种方式进行设置。
隐藏导航栏时,有什么方法可以显示.lightContent
状态栏样式??
最终效果在屏幕截图上可见。如果放大,则可以在深色背景上看到深色字母和电池。
PS。请不要仅发布有关SwiftUI(在这里我们也支持旧的iOS)和不推荐使用的内容的答案。
答案 0 :(得分:0)
在那之后,将info.plist中基于View控制器的状态栏外观设置为NO
更新
如果只希望在一个视图中显示浅色内容,则可以尝试在viewDidLoad中将用户界面样式覆盖为暗色
if #available(iOS 13.0, *) {
self.overrideUserInterfaceStyle = .dark
}
答案 1 :(得分:0)
找到了一种解决方案,可以在有导航控制器且隐藏了导航栏但显示状态栏时让SDK询问样式。
在UINavigationController
子类中,您需要覆盖
override var childForStatusBarStyle: UIViewController? { return viewControllers.last }
然后在这些控制器中,您可以指定
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
由于某种原因,如果导航栏被隐藏,则iOS SDK不会向导航控制器询问preferredStatusBarStyle
。但是,它仍然询问childForStatusBarStyle
,我们已经解决了一个问题:)