5

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

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

理想情况下,我希望我推入堆栈的新 viewController 最初以纵向而不是横向开始。奇怪的是,即使实现了这个方法,它也是从 Landscape 开始的。

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

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

4

3 回答 3

10

我找到了一种强制肖像的方法。这有点骇人听闻,但就是这样。在要强制纵向的 viewController 的 -(void)viewDidLoad 中,执行以下操作:

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

这基本上通过提供一个控制器(默认情况下仅支持纵向)来强制纵向。

于 2011-02-18T22:08:53.963 回答
4

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

于 2011-01-28T17:32:34.853 回答
1

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

UIViewController *viewController = [[UIViewController alloc] init];
[self presentViewController:viewController animated:NO completion:nil];
[self dismissViewControllerAnimated:NO completion:nil];
[viewController release];
于 2013-03-06T10:24:26.237 回答