首页 文章

在iOS 9的一个viewcontroller上隐藏状态栏

提问于
浏览
2

我有 ViewController1 使用segue来显示 ViewController2 . 它们都是UINavigationController的一部分 .

我在 ViewController2 上有一个按钮,它应该隐藏状态栏 .

我经历了几个关于此问题的Stackoverflow问题并发现了以下内容,但仍无法使其正常工作:

  • 在Info.plist中设置"View controller-based status bar appearance"为 true

  • 在ViewController2中我添加了一个方法 override func prefersStatusBarHidden() -> Bool 并返回 truefalse (根据是否单击了按钮)

  • 当点击一个按钮强制状态栏更改时,我调用 setNeedsStatusBarAppearanceUpdate .

  • 我读到了 modalPresentationCapturesStatusBarAppearance (需要启用它) . 我试图在ViewController2上将其设置为 true prepareForSegue

但是,状态栏仍然显示,并且从未调用过preStatusBarHidden .

2 回答

  • 0

    问题是您的视图控制器位于UINavigationController接口中 . 因此,运行时会向状态栏咨询导航控制器,而不是视图控制器 .

    但是,导航控制器将咨询您的视图控制器,因此应该足够说 self.navigationController?.setNeedsStatusBarAppearanceUpdate() 来设置球滚动 . 这对我来说可以:

    enter image description here

  • 3

    感谢matt的回答和Chris Hulbert's article about StatusBar以及SO question .

    显然,您需要确保ViewController层次结构中的每个人都将 prefersStatusBarHidden 转发给适当的子级 .

    有一些iOS控制器可以做到这一点(例如UINavigationViewController),还有一些没有(他们不知道应该转发哪一个) . 如果您有任何一个(例如UISplitViewController),那么您需要对其进行子类化并覆盖childViewControllerForStatusBarHidden并编写代码以将其转发给适当的子级 .

相关问题