2016-02-27 51 views
2

我有一個標準的主從應用程序,我想有條件地顯示/隱藏狀態欄。prefersStatusBarHidden是沒有得到所謂的

重寫prefersStatusBarHidden()在MasterViewController什麼都不做。它甚至不會被調用。

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

設置在Info.plist中UIViewControllerBasedStatusBarAppearance沒有幫助,想必因爲YES已經是默認值。調用setNeedsStatusBarAppearanceUpdate()也沒有幫助。

我中定位iOS 9.

回答

4

有一點點清晰的解決方案。有一個功能childViewControllerForStatusBarHidden,它專門設計用於返回應該轉發prefersStatusBarHidden的子視圖控制器。

所以,這將更好地覆蓋它。它看起來是這樣的:

override func childViewControllerForStatusBarHidden() -> UIViewController? { 
    if var topViewController = self.viewControllers.first { 
     if let navigationController = topViewController as? UINavigationController { 
      topViewController = navigationController.topViewController! 
     } 
     return topViewController 
    } 

    return super.childViewControllerForStatusBarHidden() 
} 

而且你可能甚至可以忽略以下內容。 NavigationViewController自己有childViewControllerForStatusBarHidden(),它會將它發送給子視圖控制器。

if let navigationController = topViewController as? UINavigationController { 
     topViewController = navigationController.topViewController! 
    } 
2

答案是重寫prefersStatusBarHidden()從窗口的根視圖控制器開始。在主 - 明細應用程序中,這要求子類UISplitViewController將消息沿着視圖控制器層次結構向前轉發。

事情是這樣的:

override func prefersStatusBarHidden() -> Bool { 
    if var topViewController = self.viewControllers.first { 
     if let navigationController = topViewController as? UINavigationController { 
      topViewController = navigationController.topViewController! 
     } 
     return topViewController.prefersStatusBarHidden() 
    } 

    return super.prefersStatusBarHidden() 
}