风景IOS应用程序在呈现模态viewController时抛出异常

时间:2015-02-12 18:19:49

标签: ios landscape presentviewcontroller

供参考,我使用的是Xcode 6.1,目标是IOS 7.1。 看起来有些帖子有类似的问题,但这些建议对我没用。 我有一个应用程序,我设计只在横向模式下工作。所以我将项目设置为仅支持Landscape Right和Landscape Left方向。 但是当我在我的代码中想要呈现一个新的viewController时,应用程序抛出异常并在" presentViewController"崩溃。以下代码中的陈述:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    PhotoViewController *photoVC = [storyboard
                                  instantiateViewControllerWithIdentifier:@"PhotoViewController"];
    // Configure the new view controller here.

    //photoVC.view.frame = CGRectMake(0,0,self.view.bounds.size.width, self.view.bounds.size.height);

    photoVC.view.frame = CGRectMake(0,0,568, 320);

    [self presentViewController:photoVC animated:YES completion:nil];

顺便为测试目的,我硬连线568和320的宽度和高度。

错误消息显示:

  

未捕获的异常' NSInternalInconsistencyException',原因:' Autolayout>不支持跨越边界布局>约束的旋转边界变换,例如右,左,上,下。违规观点是:   UITransitionView:0x1701fa700; frame =(-2.84217e-14 0; 320 568); transform =   [0,-1,1,0,0,0];

我不明白的一件事就是"框架"在错误消息中显示320为宽度,568为高度,当" presentViewController"传递一个viewController,框架设置为横向模式(宽度= 568,高度= 320)。 错误消息还抱怨"越过旋转边界转换",哪种提示是viewController的视图正在被旋转?

任何想法有什么问题?

感谢

1 个答案:

答案 0 :(得分:0)

经过反复试验,我发现设置" setTranslatesAutoresizingMaskIntoConstraints"对NO造成了问题。我在展示ViewController的viewDidLoad中使用它:

[self.view setTranslatesAutoresizingMaskIntoConstraints:NO];

所以我删除了这个陈述。 我使用这个语句来确保我不会在Interface Builders创建自动布局约束和我以编程方式添加的自动布局约束之间存在约束冲突。 因此,当我删除语句时,我当然会遇到约束冲突,但我通过&#34删除了#34;删除" viewDidLoad中存在约束冲突的每个子视图的现有约束。 顺便说一句,我的编程约束在" updateViewConstraints"

中调用

我不完全理解为什么将setTranslatesAutoresizingMaskIntoConstraints设置为NO导致无法以模态方式呈现新viewController的问题,但我的猜测是设置" setTranslatesAutoresizingMaskIntoConstraints"系统需要以某种方式自动确定呈现viewController的方向和大小。