IOS7状态栏隐藏/显示在select的控制器上

我想在一些控制器上显示并隐藏状态栏。 这可以做到或者是更多的一个整体的应用程序设置。

我见过许多关于plist更新的post/问题:

View controller-based status bar appearance - NO 

如果这完成了什么控制然后给予?

我正在寻找在应用程序的主屏幕上显示状态栏。 但是,例如在一个侧面(幻灯片)菜单,我希望它不显示,这是可能的吗? 这可以在IB或代码中更改吗?

编辑 – 我正在使用https://github.com/edgecase/ECSlidingViewController实现。

主控制器(显示第一页)应显示状态栏,但左侧菜单控制器不应滑动。

我相信问题是他们都坐在同一个根控制器(滑动视图控制器),所以很难完成。

理想情况下,如果主屏幕(主页面)可能会带状态栏,当它幻灯片看起来最好。

plist设置"View controller-based status bar appearance"仅控制是否应在iOS 7上应用基于每个控制器的设置。

如果您将此plist选项设置为NO,则必须手动启用和禁用状态栏(如直到iOS 6):

 [[UIApplication sharedApplication] setStatusBarHidden:YES] 

如果将此plist选项设置为YES,则可以将此方法添加到每个viewController中,以便为每个控制器独立设置statusBar(如果具有smartControlController的智能子类系统,则尤其好)

 - (BOOL)prefersStatusBarHidden { return YES; } 

编辑:

还有两个更感兴趣的方法,如果你正在select新的基于viewController的状态栏外观 –

强制状态栏更新:

 [self setNeedsStatusBarAppearanceUpdate] 

如果你有嵌套的控制器(例如在TabBarController子类中的一个contentViewController,你的TabBarController子类可能会问它是当前的childViewController并转发这个设置,我想在你的具体情况下可能是有用的:

 - (UIViewController *)childViewControllerForStatusBarHidden { return _myChildViewController; } - (UIViewController *)childViewControllerForStatusBarStyle { return _myOtherViewController; } 

在iOS 7和更高版本中,只需实现-prefersStatusBarHidden ,例如在应该隐藏状态栏的UIViewController中:

 - (BOOL)prefersStatusBarHidden { return YES; } 

默认是NO

Swift 3

 override var prefersStatusBarHidden: Bool { return true } 

您也可以在animation块中显示/隐藏状态栏,方法是将animation代码放入variables的didSet属性中,以描述是显示还是隐藏。 当你为statusBarHidden设置一个新的值时,这将自动触发在你select的时间内dynamic更新状态栏。

 /// Swift 3 syntax: var statusBarHidden: Bool = true { didSet { UIView.animate(withDuration: 0.5) { () -> Void in self.setNeedsStatusBarAppearanceUpdate() } } } override var prefersStatusBarHidden: Bool { return statusBarHidden } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) statusBarHidden = false // show statusBar, animated, by triggering didSet block } 

敏捷版Mojo66的回答 :

 override func prefersStatusBarHidden() -> Bool { return true }