Xcode IB故事板方向和容器视图

时间:2013-08-24 19:01:41

标签: ios xcode ipad ios6 interface-builder

在IOS 6 iPad应用程序中,我有一个容器视图控制器,其中包含多个容器视图。目前我已将我的应用程序锁定到横向并且工作正常,但我也想支持肖像。通过“界面”构建器使用自动布局和约束设置所有内容。如果可能的话,我想保留一个故事板以保持一致性,可维护性等。

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

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

谢谢!

编辑:

解决方案 -

按照@Charles A.的建议,我将NSLayoutConstraints链接到IBOutlets并在代码中操纵间距/优先级。我真正努力的地方是使用高度和宽度限制。如果您移动了任何内容,Interface Builder将删除或覆盖这些与前导/尾随&顶部/底部约束。我终于屈服了,摆脱了所有的高度和宽度约束,仅用于前导/尾随/上/下。

我想到的两件事:约束有里程碑(例如优先级为750的一个),所以如果你务实地将优先级从749改为750,你会得到:

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

但如果你从750改为800就可以了。

此外,在操纵约束后,我需要调用:

[self updateViewConstraints]

我找到了一条建议[parent updateViewConstraints]的帖子,它没有用,上面的那个做了!

无论如何,我希望这可以帮助其他人,因为那里并不多。

1 个答案:

答案 0 :(得分:1)

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

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

如果在故事板中如上设置约束,则可以创建类型为IBOutlet的{​​{1}}并将其连接到两个内容视图之间的水平空间约束(指定常量的视图)在我的情况下,值为0)。当您从横向设置为纵向动画时,只需将其常量值设置为NSLayoutConstraint*的负宽度即可。这应该具有预期的效果。当从纵向旋转到横向时,你显然还必须将它重新设置为0.

值得注意的是,我假设您的内容视图宽度相等。如果它们不是你,你可能还需要在滑动下方的宽度约束上设置一个出口,以便暂时将其设置为与覆盖它的宽度相同的宽度。

使用自动布局可以通过许多方法来解决此布局问题。我上面所描述的只是一种方式。根据你已经拥有的布局,它归结为有意义的东西。