问题pushViewController从Landscape到Portrait

时间:2011-01-27 21:56:40

标签: iphone ios uiviewcontroller orientation uiinterfaceorientation

我试图从支持横向(在横向模式下)的视图控制器转到明确不支持(也不应该支持)横向的视图控制器。我这样做如下:

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

理想情况下,我想要新的viewController,我正在推动堆栈,最初是以纵向开始,而不是横向开始。奇怪的是,即使实施了这种方法,它也会在Landscape中开始。

我唯一的猜测是Apple不希望用户从横向转换为纵向(尽管允许我们从横向转换回以前的纵向控制器)。

非常感谢任何见解和/或帮助。

3 个答案:

答案 0 :(得分:10)

我找到了强迫肖像的方法。这有点像黑客,但在这里。在想要强制使用肖像的viewController的 - (void)viewDidLoad中执行以下操作:

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

这基本上通过呈现控制器(默认情况下仅支持肖像)强制纵向。

答案 1 :(得分:4)

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

答案 2 :(得分:1)

上面的Sahil回答自iOS 6.0以来已被弃用。但是,以下似乎也做了同样的伎俩:

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