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 }