prefersStatusBarHidden不被调用

我有一个UITabViewController – > UINavigationController – > UIViewController并希望隐藏和取消隐藏statusBar。 当我调用setNeedsStatusBarAppearanceUpdate()方法prefersStatusBarHidden不会被调用。

 func fadeOutStatusBar (notification: NSNotification) { statusBarHidden = true self.setNeedsStatusBarAppearanceUpdate() } func fadeInStatusBar (notification: NSNotification) { statusBarHidden = false self.setNeedsStatusBarAppearanceUpdate() } override func prefersStatusBarHidden() -> Bool { return statusBarHidden } 

首先, .plist文件中View controller-based status bar appearance必须设置为YES

  • 如果你想在整个应用程序中隐藏状态栏:

对于Objective-C:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [application setStatusBarHidden:YES]; return YES; } 

对于Swift:

 func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool { application.statusBarHidden = true return true } 
  • 如果您希望状态栏在“ 指定视图控制器 ”中的.m文件中消失,只需执行:

对于Objective-C:

 - (BOOL)prefersStatusBarHidden { return YES; } 

对于Swift:

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

弄清楚了。 在info.plist文件中:view controller-status bar的外观应该设置为YES

对于swift 3,首先,确保在Info plist文件中将View controller-based status bar appearance设置为YES

截图

然后把这个添加到你的视图控制器:

 override var prefersStatusBarHidden: Bool { get { return true } } 

我希望这有助于未来的人。

也许不是OP问题的解决scheme,但是如果您在应用程序委托中使用了第二个窗口,例如用于显示启animation面,并且在飞溅之后没有隐藏它,那么还可能导致prefersStatusBarHidden不被调用被显示 – 然后窗口得到导致调用这些function的事件。