5

我想从支持景观(而在景观模式)的视图控制器,到一个明确没有(也不应该)支持景观。我这样做如下:问题pushViewController从景观到肖像

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

理想情况下,我想新的viewController,我推入到堆栈中最初开始在肖像,而不是风景。奇怪的是,即使这个方法实施,它开始在景观。

我唯一的猜测是,苹果不希望用户从风景转换为肖像(尽管允许我们从风景转回到先前的肖像控制器)。

任何见解和/或帮助将不胜感激。

回答

10

我找到了强制肖像的方法。这有点破解,但现在就是这样。在 - (空)的的viewController的要强制肖像用于执行以下操作viewDidLoad中:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentModalViewController:viewController animated:NO]; 
[self dismissModalViewControllerAnimated:NO]; 
[viewController release]; 

这基本上迫使画像,通过提供一个控制器(仅默认支持人像)。

+0

这对我来说只是通过pushViewController从纵向移动到仅横向的视图。保存你不得不调用未公开的私人API [[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeRight]谢谢! – MyCSharpCorner 2011-10-29 07:26:40

4

您需要以模态方式呈现您的新视图控制器。如果您的视图控制器存在于导航控制器中,那么导航堆栈中所有视图控制器的方向由堆栈中的根视图控制器隐含。无论您在nav stack中从根视图控制器返回的shouldAutoRotateToInterfaceOrientation是否适用于它下面的所有视图控制器。

+0

啊我明白了,这就是我所假设的情况。感谢您的澄清! – Sahil 2011-01-28 18:37:50

1

以上Sahil的回答自iOS 6.0起弃用。然而,下面似乎也是这样做的:

UIViewController *viewController = [[UIViewController alloc] init]; 
[self presentViewController:viewController animated:NO completion:nil]; 
[self dismissViewControllerAnimated:NO completion:nil]; 
[viewController release];