1

在 IOS 6 iPad 应用程序中,我有一个带有多个容器视图的容器视图控制器。目前我已将我的应用程序锁定为横向并且工作正常,但我也想支持纵向。一切都是通过界面生成器使用自动布局和约束设置的。如果可能的话,我想保留一个故事板以保持一致性、可维护性等。

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

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

谢谢!

编辑:

解决方案 -

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

我发现了 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]

我发现了一篇建议 [parent updateViewConstraints] 的帖子,它不起作用,上面的那个!

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

4

1 回答 1

1

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

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

如果在情节提要中如上所述设置了约束,您可以创建一个IBOutletof 类型NSLayoutConstraint*并将其连接到两个内容视图之间的水平空间约束(在我上面的例子中,它指定一个常量值 0)。当您从横向动画到纵向时,只需将其常量值设置为contentViewOne. 这应该具有预期的效果。从纵向旋转到横向时,您显然还必须将其设置回 0。

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

有许多潜在的方法可以使用自动布局来解决这种布局。我上面描述的只是其中一种方式。考虑到您已经拥有的布局,这归结为有意义的事情。

于 2013-08-24T19:21:24.540 回答