12

我正在尝试使用界面构建器中的约束(自动布局)来布局屏幕设计,并希望避免编码约束,但我会接受我猜的任何一种情况的答案。

我在顶级视图中包含两个子视图。我想修复第一个子视图到屏幕顶部的垂直距离(我能够做到这一点 - 垂直空间约束的常见用例)。我希望第二个子视图浮动(垂直)在第一个子视图底部和屏幕底部之间的距离的中心。这个想法是该设计对 iPhone 3.5" 和 4" 尺寸有所响应。

我在定义一个或一组约束来实现这一点时遇到了麻烦。

我尝试在第二个子视图与其邻居顶部(第一个子视图)和超级视图底部之间的垂直间距约束上设置不等式,并使用这些约束的优先级。

在其他一些关于 SO 的相关帖子中提出的一个想法是使用一个固定到屏幕底部的容器,以及固定到第一个子视图的底部边缘,然后将我的第二个子视图居中容器。如果可能的话,我希望避免使视图层次结构复杂化,但也许这不容易避免。

有什么想法或建议吗?

4

1 回答 1

17

更新

这个答案描述了如何在 Xcode 6.0 中执行此操作(并且可能适用于 Xcode 5.0 和 5.1)。

原来的

如果你想用自动布局来做到这一点,你必须添加至少一个间隔视图。它不必是垂直居中视图(或任何其他视图)的超级视图,因此它对您的视图层次结构的影响很小。

我建议不要尝试在 Xcode 4.6.3 的 Interface Builder 中设置约束。这太痛苦了。但如果你真的必须这样做,这是可行的。

  1. UIView从 top-hugging 视图的底部边缘到 superview 的底部边缘创建一个间隔(一个普通的 old )。将其设置为隐藏。将其约束到顶部拥抱视图以及根视图的左边缘和下边缘,并固定其宽度。我的间隔宽度是 10:

    间隔约束

  2. 添加中间视图(此处为按钮)。给它一个“容器中的水平中心”约束。然后选择中间视图和间隔视图,并给它们一个“垂直中心”约束:

    中间视图约束

请注意,如果您在 IB 显示正确的指南时放下中间视图,它将为您设置这些约束。

您可以通过为后代(但不是兄弟姐妹和祖先)启用调整大小并在 IB 中调整根视图的大小来进行测试。中间视图将保持在顶部拥抱视图和超级视图底部之间的中心:

4英寸屏幕尺寸

短视

于 2013-07-17T02:16:28.727 回答