2013-08-24 25 views
1

在IOS 6 iPad应用程序中,我有一个具有多个容器视图的容器视图控制器。目前,我已将自己的应用锁定到风景并正常工作,但我也想支持人像。一切都是通过使用自动布局和通过界面构建​​器的约束来设置的。如果可能,我想保持一个故事板的一致性,可维护性等。Xcode IB Storyboards方向和容器视图

布局是这样的:标题,左侧菜单,两个内容窗格(横向并排)和一个窗格,我全部调整窗格大小除了内容。当从横向旋转到纵向时,我希望一个内容窗格滑动到另一个的下面(目前它从屏幕上吹掉),并且都要粘到容器视图的边缘。

在HTML5/CSS3中,这很容易做,但我坚持在IB中,任何帮助/想法都会很棒!

谢谢!

编辑:

解决方案 -

继@Charles A.的建议下,我联系了NSLayoutConstraints到IBOutlets和操纵间距/优先级代码。我真正挣扎的地方是使用高度和宽度约束。如果你移动了任何东西,界面生成器会删除或覆盖顶部/底部约束的前导/尾随&。我终于让步了,并且摆脱了所有身高限制,并且只使用了前导/尾随/顶部/底部。

2的事情,我想通了:约束具有里程碑(一个以优先级#750为例),所以如果你务实更改优先级,从749到750,你会得到:

Mutating a priority from required to not on an installed constraint (or vice-versa) is not supported. 

但如果你从750变成了800,你很好。

此外,操纵约束条件之后,我需要打电话:

[self updateViewConstraints] 

我找到了一个职位,建议[父updateViewConstraints],没有工作,在一个没有以上!

无论如何,我希望这可以帮助其他人在这个地方,因为那里没有太多。

回答

1

如果不知道如何设置布局约束来处理两个内容视图,就很难回答问题。话虽如此,我可能会通过让我的布局约束类似于这个(我将使用可视化格式来描述,我假设superview是这种情况下的两个内容视图的父级)来讨论这个UI:

|-[contentViewOne]-0-[contentViewTwo(==contentViewOne)]-| 

如果约束设置如上述在故事板中,可以创建一个IBOutletNSLayoutConstraint*类型,并且将其连接到两个内容视图之间的水平空间约束(指定为0的恒定值的一个,在我上面的情况)。当您从风景变为动画时,只需将其设置为contentViewOne的负值即可。这应该有所需的影响。当从纵向旋转到横向时,您显然也必须将其设置回0。

值得注意的是,我假设你的内容视图是相等的宽度。如果他们不是,你可能还需要为滑动的宽度限制做一个宽度限制,以便暂时将其设置为与覆盖它的宽度限制相同的宽度。

有很多潜在的方法可以使用自动布局来解决此布局。我上面描述的只是一个这样的方式。这取决于你已有的布局有什么意义。