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



我想隐藏iPhone顶部的状态栏。我可以在我的控制器上添加以下代码来做到这一点。如果我的父控制器有此代码,它可以工作。但我想要的是允许我的嵌套控制器隐藏状态栏。如果我在我的嵌套控制器上添加此代码,它可以产生任何效果。如何在我的嵌套控制器上执行此操作?

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

在你的父母中:

目标-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

在 child 中调用 setNeedsStatusBarAppearanceUpdate,让系统知道当前状态栏外观无效,系统需要再次调用prefersStatusBarHidden

正如

Kymer指出的那样,正确的方法是覆盖childViewControllerForStatusBarHidden

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

最新更新