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

Stu*_*rtM 44 statusbar uiviewcontroller ios uistatusbar ios7

我想在某些控制器上显示和隐藏状态栏.可以这样做,还是更多的整体应用程序设置.

我看过很多有关plist更新的帖子/问题:

View controller-based status bar appearance - NO
Run Code Online (Sandbox Code Playgroud)

如果完成,那么给出什么控制?

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

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

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

我认为问题在于它们都位于同一个根控制器(滑动视图控制器)内,因此很难完成.

理想情况下,如果主屏幕(主页面)可以使用状态栏,当它滑动时看起来最好.

auc*_*uco 129

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

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

[[UIApplication sharedApplication] setStatusBarHidden:YES]
Run Code Online (Sandbox Code Playgroud)

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您选择基于新的基于viewController的状态栏外观,还有两个有用的方法 -

强制状态栏更新:

[self setNeedsStatusBarAppearanceUpdate]
Run Code Online (Sandbox Code Playgroud)

如果您有嵌套控制器(例如TabBarController子类中的contentViewController,您的TabBarController子类可能会询问它当前的childViewController并转发此设置.我认为在您的特定情况下可能有用:

- (UIViewController *)childViewControllerForStatusBarHidden {
     return _myChildViewController;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
     return _myOtherViewController;
}
Run Code Online (Sandbox Code Playgroud)


Moj*_*o66 14

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

- (BOOL)prefersStatusBarHidden {
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

默认是NO.


Dan*_*lea 14

斯威夫特3:

override var prefersStatusBarHidden: Bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

  • 不需要get {},您可以立即返回true! (3认同)

Nat*_*lia 7

您还可以在动画块中显示/隐藏状态栏,方法是将动画代码放在变量的 didSet 属性中,该属性描述了它是应该显示还是隐藏。当您为statusBarHiddenBool设置新值时,这会在您选择的持续时间内自动触发状态栏的动画更新。

/// 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
}
Run Code Online (Sandbox Code Playgroud)