2012-10-10 52 views
1

我正在爲iOS5和iOS6構建應用程序。我在UINavigationController中有這個UIViewController,我希望它保持縱向模式。使UiViewController保持縱向模式iOS6 VS iOS5

該代碼適用於iOS5,但不適用於iOS6。

// iOS5 rotation 
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    if (interfaceOrientation == UIInterfaceOrientationPortrait) 
     return YES; 
    else 
     return NO; 
} 

// iOS6 rotation 
- (BOOL)shouldAutorotate 
{ 

    return YES; 


} 
- (NSUInteger)supportedInterfaceOrientations 
{ 
    return UIInterfaceOrientationMaskPortrait; 

} 

這裏有什麼問題?因此,我發現很多類似的問題,但通常答案不適合我。

編輯: 也許我是不準確的,但我需要一個單一的視圖控制器(我的應用程序的主頁)留在肖像模式,而不是所有的應用程序

回答

7

首先,在很大程度上取決於與控制器UIViewController中嵌入。

例如,如果其內部的UINavigationController,那麼你可能需要繼承的是UINavigationController的覆蓋方位的方法是這樣的。

subclassed UINavigationController(層次結構的頂級視圖控制器將控制方向。)需要將其設置爲self.window.rootViewController。

- (BOOL)shouldAutorotate 
{ 
    return self.topViewController.shouldAutorotate; 
} 
- (NSUInteger)supportedInterfaceOrientations 
{ 
    return self.topViewController.supportedInterfaceOrientations; 
} 

從iOS 6開始,UINavigationController不會要求它的UIVIewControllers支持方向。因此我們需要對它進行子類化。

此外

那麼,對於UIViewControllers,其中只需要縱向模式,寫這些功能

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

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

對於UIViewControllers,需要景觀也變化屏蔽所有。

- (NSUInteger)supportedInterfaceOrientations 
{ 
    return (UIInterfaceOrientationMaskAllButUpsideDown); 
    //OR return (UIInterfaceOrientationMaskAll); 
} 

現在,如果您想在方向更改時進行一些更改,請使用此功能。

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 

} 

非常重要

在AppDelegate中,寫這篇文章。這是非常重要的。

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

如果您只想爲所有視控制器提供肖像模式,請應用portait遮罩。即UIInterfaceOrientationMaskPortrait

否則,如果您希望某些UIViewControllers保留在肖像中,而其他人支持所有的方向,則應用ALL掩碼。即UIInterfaceOrientationMaskAll

+0

對不起,請查看我對該問題所做的修改。 – Napolux

+0

查看編輯答案 – mayuur

+0

剛剛找到了測試的時間。有用! – Napolux

0

試試這個:

-(BOOL)shouldAutorotate 
{ 
    return NO; 
} 

-(NSUInteger)supportedInterfaceOrientations 
{ 
    UIInterfaceOrientationMask orientationMask = UIInterfaceOrientationMaskPortrait; 
    return orientationMask; 
} 

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

這應該以只支持肖像模式下工作。

+0

對不起,請查看我對該問題所做的修改。順便說一句, – Napolux

+0

不起作用。 – Napolux