如何pipe理状态栏显示/隐藏嵌套控制器

我想隐藏iPhone的顶部状态栏。 我可以在我的控制器上添加下面的代码来做到这一点。 它工作,如果我的父母控制器有这个代码。 但是我想要的是让我的嵌套控制器隐藏状态栏。 如果我添加这个代码在我的嵌套控制器,它的作品产生任何效果。 怎么可以在我的嵌套控制器?

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

在你的父母:

Objective-C的

 - (BOOL)prefersStatusBarHidden { if(self.childViewControllers.count > 0) { return [self.childViewControllers.lastObject prefersStatusBarHidden]; } return YES;// or any other default value } 

迅速:

 override func prefersStatusBarHidden() -> Bool { if (childViewControllers.count > 0) { childViewControllers.last?.prefersStatusBarHidden() } return true } 

在你的孩子VC调用[self setNeedsStatusBarAppearanceUpdate]; 例如在viewDidLoad

目标是要求子视图控制器(如果存在)关于它的prefersStatusBarHidden

在子setNeedsStatusBarAppearanceUpdate中调用setNeedsStatusBarAppearanceUpdate来让系统知道当前状态栏的外观是无效的,并且prefersStatusBarHidden状态栏prefersStatusBarHidden需要被系统再次调用。

正如Kymer指出的,正确的做法是重载childViewControllerForStatusBarHidden

  override var childViewControllerForStatusBarHidden: UIViewController? { return childViewControllers.last }