将状态栏设置为浅色内容并动态显示/隐藏(带UINavigationControllers的UITabBarController)

时间:2017-06-18 22:20:26

标签: ios iphone swift xcode

我有一个UITabBarController作为根视图控制器。每个选项卡都有一个嵌入在导航控制器内部的视图控制器。我的导航栏是深色的,所以我需要将状态栏设置为.lightContent。我还需要动态隐藏状态栏。

如果我设置"查看基于控制器的状态栏外观" to" NO",我可以正确设置状态栏为" .lightContent",但我无法动态隐藏状态栏。

如果我设置"查看基于控制器的状态栏外观"到"是",状态栏只会设置为" .lightContent"如果导航栏不存在。

这是我在每个视图控制器中用来显示或隐藏状态栏的内容:

var shouldHideStatusBar: Bool = false {
    didSet { self.setNeedsStatusBarAppearanceUpdate() }
}
override var prefersStatusBarHidden: Bool { return shouldHideStatusBar }
override var preferredStatusBarUpdateAnimation: UIStatusBarAnimation { return .slide }
override var preferredStatusBarStyle: UIStatusBarStyle { return .lightContent }

我也尝试过:

navigationController?.navigationBar.barStyle = .black

为了将状态栏设置为.lightContent并且仍然能够动态显示和隐藏状态栏,必须有一些我缺少的东西。

2 个答案:

答案 0 :(得分:0)

导致使用弃用的方法:

echo "\n";

不理想,但有效。希望有人有一个解决方案,而不依赖于弃用的方法。

答案 1 :(得分:0)

您必须在视图层次结构中增加这些值。例如,您的tabBarController应该询问其selectedViewController对于prefersStatusBarHidden的价值是什么,那么您的navigationController就需要询问其topViewController对于{{ 1}}是。这样,在prefersStatusBarHidden上调用prefersStatusBarHidden时,它将中继最顶部的视图控制器要在状态栏上执行的操作。