【问题标题】:Xcode IB Storyboards orientation and container viewsXcode IB Storyboards 方向和容器视图
【发布时间】:2013-08-27 15:22:19
【问题描述】:

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

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

在 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] 的帖子,它不起作用,上面的那个起作用了!

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

【问题讨论】:

    标签: ios xcode ipad ios6 interface-builder


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多