如何处理ios 8中每个视图控制器的自动旋转?

时间:2014-10-17 23:25:14

标签: ios ios8 auto-rotation

场景是这样的:

让我们说ViewControllers A,B。

A仅支持纵向模式。 B支持所有模式。

我点击A中的缩略图并在B中显示完整图像。因此B中的自动旋转工作正常。如果我在B处于纵向模式时从B回到A,则工作正常。

但问题是,当我在B时,如果我将手机保持在横向模式,那么如果我回到A,那么它也会显示不应发生的风景。

我在iOS7中工作得非常好,但它在iOS 8中搞砸了。

任何人都可以帮忙吗?提前谢谢。

2 个答案:

答案 0 :(得分:0)

您的代码有问题。我刚刚实现它进行测试,它工作正常。

我加入了A:

- (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskPortrait;
}

添加到B:

- (NSUInteger) supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

并将按钮添加到A以打开B:

- (IBAction) buttonAction:(id)sender
{
    UIStoryboard *story = [UIStoryboard storyboardWithName:@"itShouldWork" bundle:nil];
    MyViewController *controller = (MyViewController *)[story instantiateInitialViewController];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:controller];
    [self presentViewController:nav animated:YES completion:nil];
}

正如我所说,它运作良好。在iphone 5设备(iOS 8)上测试。使用Xcode 6构建

答案 1 :(得分:0)

这似乎是iOS 8中的一个错误。

作为一种解决方法,您可以将B控制器包装在UINavigationController中。除了检查iOS版本外,它看起来像

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8")) {
    [self presentViewController:[[UINavigationController alloc] initWithRootViewController:controllerB] animated:YES completion:nil];
} else {
    [self presentViewController:controllerB animated:YES completion:nil];
}

可以找到用于检查iOS版本的宏here