从横屏切换到竖屏时出现的pushViewController问题

5

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

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

理想情况下,我希望我要推到堆栈上的新viewController一开始就处于纵向模式而不是横向模式。奇怪的是,即使实现了这种方法,它仍然从横向模式开始。
我唯一的猜测是,即使允许我们从横向模式回到先前处于纵向模式的控制器,苹果可能不希望用户从横向模式过渡到纵向模式。
非常感谢任何见解和/或帮助。
3个回答

10

我找到了一种强制使用竖屏的方法。虽然这有点像是一个hack,但以下是方法。在你想要强制使用竖屏的viewController的-(void)viewDidLoad中,执行以下操作:

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

这基本上是通过呈现一个控制器(默认仅支持纵向)来强制使用纵向。


这对我来说解决了通过pushViewController从纵向视图转换到横向视图的问题。这样可以避免调用未记录的私有API [[UIDevice currentDevice] setOrientation:UIDeviceOrientationLandscapeRight]。谢谢! - MyCSharpCorner
不错的技巧...非常实用... :) - Roshit

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

啊,我明白了,这就是我所假设的情况。感谢您的澄清! - Sahil

1

由Sahil提供的答案已经在iOS 6.0之后被弃用。然而,以下方法似乎能够达到相同的效果:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接