2015-12-02 29 views
0

我有一個應用程序,支持所有的方向,但在某些情況下,我想暫時限制它只有肖像。它不是視圖控制器的混合,只需要使用肖像和可以使用任何方向的視圖控制器,相反,當用戶單擊屏幕上的按鈕而視圖控制器保持不變時,我想禁用方向更改。暫時限制應用程序到特定的方向

在尋找方法來限制UIViewController的UI方向時,彈出的方法是supportedInterfaceOrientations()preferredInterfaceOrientationForPresentation()。無論是對我有點不工作:風景被

  • supportedInterfaceOrientations()只運行一次的時候,所以,即使我做它的返回值的條件,它並沒有條件改變後運行。
  • 我的視圖控制器在導航堆棧中呈現,而非模態,所以preferredInterfaceOrientationForPresentation()根本不運行。

有什麼辦法可以達到我要找的效果嗎?

+0

當你說'supportedInterfaceOrientations()'只在加載視圖時才運行,你是什麼意思?你能詳細說明這一點嗎? –

+0

當viewController初始化並加載時,該方法運行。然後用戶點擊一個按鈕並設置一個標誌來限制方向。然後,如果我旋轉設備,它會旋轉,我可以在調試器中看到'supportedInterfaceOrientations()'在第一次之後從未再次運行。我是否可以強制操作系統通過再次調用方法來刷新支持的方向上的數據? – SaltyNuts

回答

1

我打算假設您的視圖控制器位於導航控制器中。沒有導航控制器時,只要設備旋轉,就會調用supportedInterfaceOrientations()。但是,當嵌入導航控制器時,導航控制器將決定視圖控制器是否應該旋轉。 (見下面的例子) enter image description here enter image description here

你需要做什麼?實施supportedInterfaceOrientations()在自定義的UINavigationController像這樣:

override func supportedInterfaceOrientations() -> UIInterfaceOrientationMask { 
    if self.topViewController is RootViewController { 
     return .Portrait 
    } else { 
     return .All 
    } 
} 

這是this重複的問題,但我沒有看到一個迅速的例子。對於任何你想留在肖像中的類,只需用類名替換RootViewController即可。

+0

唉!那個導航控制器!每次都有我! – SaltyNuts

+0

顯然'UITabBarController'也有同樣的問題。向自定義的'UITabBarController'添加相同的覆蓋可以解決這個問題。 – SaltyNuts

+0

絕對是一件容易被人忽視的東西! –

相關問題