2012-10-10 73 views
1

我有一個視圖控制器中,我希望它只是在傾情呈現,所以我沒有在iOS 6中的以下內容:問題與iOS 6自轉

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

但是當我旋轉設備,它仍然開啓它景觀。任何想法在哪裏檢查這個?我把一個斷點,它擊中supportedInterfaceOrientations,但它仍然旋轉

+0

裏面UINavigationController的控制器時,可以有更高的優先級比應用程序的委託? – Vladimir

+0

在您的Xcode目標設置中,檢查您是否在支持的界面方向上僅選擇了portait。 – iDev

+0

我不希望我的應用程序只支持肖像,我有幾個VC,我想使它只支持肖像 – adit

回答

4

你有導航控制器? iOS6確定可以自動旋轉的方式已經改變。它正確地爲您的視圖控制器請求supportedInterfaceOrientations,但它可能會嚮導航堆棧層次結構中的另一個元素請求「shouldAutorotate」並接受該答案。如果你的navigationController/tabviewController對這個問題返回yes,那麼它將不會諮詢你的視圖控制器。

+0

沒有我沒有導航控制器,這只是一個視圖控制器,基本上只是添加它作爲一個子視圖 – adit

+4

好了,然後在您的應用程序委託中查看「 - (BOOL)應用程序:(UIApplication *)應用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions」函數,並確保您的窗口不只是將viewControllers視圖添加爲子視圖,你正在設置UIWindow的rootViewController到你的viewController – rooster117

+0

謝謝你,rooster117!我一直在嘗試解決這個問題,但沒有看到其他人解釋UIWindow的細節。 – uvesten

2

您還應該提供應用程序的應用程序委託支撐取向:

- (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

確保正確添加根視圖控制器(未將其添加爲一個子視圖),但使用下列內容:

[window setRootViewController:myVC]; 

另外,如果您的視圖控制器是一個UINavigationController裏面,你應該使用這個類爲navigationcontroller:

@implementation UINavigationController (autorotate) 

- (NSUInteger)supportedInterfaceOrientations{ 
    return UIInterfaceOrientationMaskPortrait; 
} 

@end 

在iOS 6中,只有最頂級的全屏控制器的根視圖控制器被詢問有關旋轉。這包括UINavigationController,這個類不問它的視圖控制器,它直接響應。 Apple現在建議將子類UINavigationController覆蓋supportedInterfaceOrientations's輸出。

+0

我有一個視圖控制器,我只想支持肖像,所以不是整個應用程序支持肖像 – adit

+0

你仍然應該在委託中提供這種方法,所有的方向可能爲您的應用程序。確保你添加你的視圖控制器作爲根,而不是視圖作爲子視圖。另請檢查項目 – Daniel

+0

.hmm的info.plist方向..在我的應用程序代表我沒有窗口設置我的vc作爲根。我正在使用故事板設置所有這些,我有在故事板中這樣做的方法嗎? – adit

0

確保您項目設置和info.plist中只有縱向選擇,因爲他們支持的方向檢查