2013-02-15 242 views
3

我時時刻刻發展與標籤欄並且使用的是iOS 6的Xcode 4.5iOS 6的標籤欄應用程序:shouldAutorotate不工作

通常情況下,應用程序應該支持所有的接口方向在故事板一些導航視圖控制器一個應用程序,但我有兩個僅支持縱向模式的視圖。

所以我下面的代碼添加到視圖控制器:

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationPortrait; 
} 

在一個其他應用程序的本人無故事板和導航視圖控制器開發了iOS 6的它的工作原理,但她不要! :/

我希望有人能幫助,因爲我發現了一些其他的職位,在那裏沒有什麼幫助......

與德國

Laurenz

編輯問候:

我也試過了 - 不起作用! :

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 

} 

回答

0

喬納森優秀的答案。

我修改了他的代碼來處理導航控制器的一個片段。

- (BOOL)shouldAutorotate { 
    if (self.selectedViewController) { 
     if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) { 
      return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] shouldAutorotate]; 
     } 
     return [self.selectedViewController shouldAutorotate]; 
    } else { 
     return YES; 
    } 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    if (self.selectedViewController) { 
     if ([self.selectedViewController isKindOfClass:[UINavigationController class]]) { 
      return [[[(UINavigationController*)self.selectedViewController viewControllers] lastObject] supportedInterfaceOrientations]; 
     } 
     return [self.selectedViewController supportedInterfaceOrientations]; 
    } else { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
} 
6

據我所知,這個問題的產生是由於的UITabBarController UINavigationController的和正在返回自己的缺省值 - (BOOL)shouldAutorotate和 - (NSUInteger)supportedInterfaceOrientations。

一個解決方案是通過類別(或只是子類)擴展這兩個類,以便從您自己的視圖控制器中實現這些方法的實現中返回適當的值。這是對我工作(你可以拖放到應用程序委託本):

@implementation UITabBarController(AutorotationFromSelectedView) 

- (BOOL)shouldAutorotate { 
    if (self.selectedViewController) { 
     return [self.selectedViewController shouldAutorotate]; 
    } else { 
     return YES; 
    } 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    if (self.selectedViewController) { 
     return [self.selectedViewController supportedInterfaceOrientations]; 
    } else { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
} 

@end 

@implementation UINavigationController(AutorotationFromVisibleView) 

- (BOOL)shouldAutorotate { 
    if (self.visibleViewController) { 
     return [self.visibleViewController shouldAutorotate]; 
    } else { 
     return YES; 
    } 
} 

- (NSUInteger)supportedInterfaceOrientations { 
    if (self.visibleViewController) { 
     return [self.visibleViewController supportedInterfaceOrientations]; 
    } else { 
     return UIInterfaceOrientationMaskAllButUpsideDown; 
    } 
} 
@end 

默認情況下,所有的視圖控制器將繼續自轉。在只支持縱向模式的兩個視圖控制器中,執行以下操作:

-(BOOL)shouldAutorotate { 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations { 
    return UIInterfaceOrientationMaskPortrait; 
} 
+0

我在appdelegate.m和viewcontroller.m中實現了你的代碼。它現在鎖定了viewcontroller.m的橫向模式,但是當我以橫向模式從先前視圖到viewcontroller.m時,它將以橫向模式顯示屏幕,並且這次它不會更改爲potrait模式。 – 2013-07-15 10:59:25

+0

這是正確的答案。我一直有這個問題的負荷和分類UITab和UINav固定它。你應該標記這個答案是正確的。 – 2014-02-03 14:33:05

+0

我已經擴展了此代碼以支持UISplitViewController:https://gist.github.com/cameroncooke/a9244bc4d677f50940f5 – Camsoft 2015-10-20 08:54:55