在IOS中使用autolayout在邻居之间居中查看

时间:2013-07-16 22:51:19

标签: ios objective-c autolayout

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

我在顶级视图中包含两个子视图。我想将第一个子视图的垂直距离固定到屏幕顶部(我能够实现这一点 - 垂直空间约束的常见用例)。我希望第二个子视图在第一个子视图的底部和屏幕底部之间的距离的中心浮动(垂直)。这个想法是,设计对iPhone 3.5“与4”尺寸的反应有所不同。

我无法定义一个约束或一组约束来完成此任务。

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

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

有任何想法或建议吗?

1 个答案:

答案 0 :(得分:17)

更新

This answer描述了如何在Xcode 6.0中执行此操作(可能适用于Xcode 5.0和5.1)。

ORIGINAL

如果要使用自动布局执行此操作,则必须至少添加一个间隔视图。它不必是垂直居中视图(或任何其他视图)的超视图,因此它对视图层次结构的影响非常小。

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

  1. 从顶部拥抱视图的底部边缘到superview的底部边缘创建一个spacer(一个普通的旧UIView)。将其设置为隐藏。将它限制为顶视图和根视图的左下边缘,并固定其宽度。我的间隔宽度是10:

    spacer constraints

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

    middle view constraints

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

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

    4-inch screen size

    short view