2014-12-04 110 views
0

我想阻止某些UIViewController的風景方向。我讀了很多不同的東西來管理它,但我沒有找到一個解決方案運行良好。每次,方向都不會被阻塞,即使它應該是。即使我擋住風景旋轉,屏幕仍在旋轉

我有以下代碼以阻止在UIViewController橫向方向不具有的橫向旋轉:

- (BOOL)shouldAutorotate { 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 

- (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { 
    return UIInterfaceOrientationPortrait; 
} 

即使是,該視圖以橫向旋轉。

我錯過了什麼嗎?

+0

您需要使用自定義導航控制器來阻止方向。 – 2014-12-04 10:16:02

回答

1

你有你的UIViewControllerUINavigationController?或TabBarController?在這種情況下,UIViewController只是傳遞的是調用UINavigationController,你將不得不繼承UINavigationController和實施有這些方法,並檢查其在導航控制器的堆棧的視圖控制器的是,想要旋轉,只允許旋轉的一個你想要的那個。

這是我是如何做的一個項目:

- (NSUInteger)supportedInterfaceOrientations 
{ 
    if ([self.visibleViewController class] == [MyViewController class]) { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } else { 
     return UIInterfaceOrientationMaskPortrait; 
    } 
} 

你可以一試問的UIViewController從導航控制器的問題,但是這並沒有爲我由於某種原因,工作得很好。

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return [[self.viewControllers lastObject] supportedInterfaceOrientations]; 
} 

對其他方法也使用相同的方法。

+0

正如你所說,我的ViewController是在一個自定義的NavigationController中。我嘗試了你的建議,但無論如何它都會旋轉。 – tbaranes 2014-12-04 10:36:46

+0

也許嘗試添加shouldAutorotate {返回NO}到其他視圖控制器?但我不認爲這是必要的。 – Miki 2014-12-04 10:47:00

+0

也沒有工作。它看起來像它只是關心方位可用,並且不要使用此方法(即使他們被稱爲,只是檢查出來) – tbaranes 2014-12-04 10:50:59