隐藏导航栏时的样式状态栏

时间:2020-09-22 09:09:46

标签: ios swift uikit

我知道使用UIKit通常只覆盖:

override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }
在您的UIViewController(或UINavigationController,如果存在)中的

效果很好。


但是,执行此操作时会遇到问题:

navigationController?.setNavigationBarHidden(true, animated: true)

现在,我看不到导航栏,这是预料之中的,并且非常正常。但是,我看到状态栏带有深色字体,这是意外的(我的导航控制器覆盖了上面的属性,并且在未隐藏导航栏时它可以正常工作)。我想查看状态栏,但是我希望它以浅色字体显示。从这一点来看,导航控制器不会监听preferredStatusBarStyle,因此我无法以这种方式进行设置。

隐藏导航栏时,有什么方法可以显示.lightContent状态栏样式??

最终效果在屏幕截图上可见。如果放大,则可以在深色背景上看到深色字母和电池。 Screenshot of dark statusbar on dark background

PS。请不要仅发布有关SwiftUI(在这里我们也支持旧的iOS)和不推荐使用的内容的答案。

2 个答案:

答案 0 :(得分:0)

尝试将状态栏样式设置为浅色 enter image description here

在那之后,将info.plist中基于View控制器的状态栏外观设置为NO

enter image description here

更新

如果只希望在一个视图中显示浅色内容,则可以尝试在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,我们已经解决了一个问题:)