我有一个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并且仍然能够动态显示和隐藏状态栏,必须有一些我缺少的东西。
答案 0 :(得分:0)
导致使用弃用的方法:
echo "\n";
不理想,但有效。希望有人有一个解决方案,而不依赖于弃用的方法。
答案 1 :(得分:0)
您必须在视图层次结构中增加这些值。例如,您的tabBarController
应该询问其selectedViewController
对于prefersStatusBarHidden
的价值是什么,那么您的navigationController
就需要询问其topViewController
对于{{ 1}}是。这样,在prefersStatusBarHidden
上调用prefersStatusBarHidden
时,它将中继最顶部的视图控制器要在状态栏上执行的操作。