Ios 将状态栏设置为灯光内容并动态显示/隐藏(带UINAVIGATIONCONTROLLER的UITabBarController)
我有一个UITabBarController作为根视图控制器。每个选项卡都有一个嵌入在导航控制器中的视图控制器。我的导航栏是深色的,所以我需要将状态栏设置为.lightContent。我还需要动态隐藏状态栏 如果我将“基于视图控制器的状态栏外观”设置为“否”,我可以将状态栏正确设置为“.lightContent”,但我无法动态隐藏状态栏 如果我将“基于视图控制器的状态栏外观”设置为“是”,则仅当导航栏不存在时,状态栏才会设置为“.lightContent” 这是我在每个视图控制器中用于显示或隐藏状态栏的内容:Ios 将状态栏设置为灯光内容并动态显示/隐藏(带UINAVIGATIONCONTROLLER的UITabBarController),ios,iphone,swift,xcode,Ios,Iphone,Swift,Xcode,我有一个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,并且仍然能够动态显示和隐藏状态栏,我必须缺少某些内容。导致使用不推荐的方法:
UIApplication.shared.setStatusBarHidden(true, with: .slide)
不是很理想,但很有效。希望有人能在不依赖已弃用方法的情况下找到解决方案。导致使用已弃用方法:
UIApplication.shared.setStatusBarHidden(true, with: .slide)
不是很理想,但很有效。希望有人能找到一个不依赖不推荐的方法的解决方案。您必须通过视图层次结构将这些值冒泡起来。例如,您的
tabBarController
应该询问它的selectedViewController
它的prefersStatusBarHidden
值是多少,然后您的navigationController
需要询问它的topViewController
它的prefersStatusBarHidden
值是多少。这样,当在选项卡BarController
上调用prefersStatusBarHidden
时,它会传回最顶层的视图控制器想要对状态栏执行的操作。您必须在视图层次结构中向上冒泡这些值。例如,您的tabBarController
应该询问它的selectedViewController
它的prefersStatusBarHidden
值是多少,然后您的navigationController
需要询问它的topViewController
它的prefersStatusBarHidden
值是多少。这样,当在选项卡barcontroller
上调用prefersStatusBarHidden
时,它会将最顶端的视图控制器想要对状态栏执行的操作传递回来