我有一个UITabBarController作为根视图控制器 . 每个选项卡都有一个嵌入在导航控制器内部的视图控制器 . 我的导航栏是深色的,所以我需要将状态栏设置为.lightContent . 我还需要动态隐藏状态栏 .
如果我将“查看基于控制器的状态栏外观”设置为“否”,我可以将状态栏正确设置为“.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 回答
导致使用弃用的方法:
不理想,但有效 . 希望有人有一个解决方案,而不依赖于弃用的方法 .
您必须通过视图层次结构向上冒泡这些值 . 例如,您的
tabBarController
应该询问selectedViewController
它的prefersStatusBarHidden
的值是什么,那么navigationController
需要询问topViewController
prefersStatusBarHidden
的值是什么 . 这样,当在tabBarController
上调用prefersStatusBarHidden
时,它会回传最顶层视图控制器想要对状态栏执行的操作 .