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

时间:2016-03-06 15:21:55

标签: ios swift

我想隐藏iphone顶部的状态栏。我可以在我的控制器上添加以下代码来执行此操作。如果我的父控制器有这个代码,它可以工作。但我想要的是允许我的嵌套控制器隐藏状态栏。如果我在嵌套控制器上添加此代码,它会起作用。怎么能在我的嵌套控制器上做到?

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

在你的父母:

目标-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,让系统知道当前状态栏的外观无效,并且系统需要再次调用prefersStatusBarHidden