在iOS中使用自动布局在邻居之间居中查看

我试图从接口生成器使用约束(自动布局)来布局屏幕devise,并希望避免编码约束,但我会接受任何情况下的答案我猜。

顶级视图中包含两个子视图。 我想修复第一个子视图的垂直距离到屏幕的顶部(我能够完成这一点 – 垂直空间约束的常见用例)。 我想第二个子视图浮动(垂直)在第一个子视图底部和屏幕底部之间的距离的中心。 这个想法是,该devise对iPhone 3.5“vs 4”的尺寸有所反应。

我很难定义一个约束或一组约束来完成这个。

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

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

任何想法或build议?

UPDATE

这个答案描述了如何在Xcode 6.0中做到这一点(也可能在Xcode 5.0和5.1中)。

原版的

如果你想用自动布局来做到这一点,你必须添加至less一个spacer视图。 它不一定是垂直居中视图(或任何其他视图)的超视图,所以它对视图层次结构有相当小的影响。

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

  1. 从顶部拥抱视图的底部边缘到超级视图底部边缘创build一个间隔符(一个普通的旧UIView )。 将其设置为隐藏。 给顶部拥抱视图和根视图的左边缘和底部边缘设置约束,并固定其宽度。 我的间隔宽度是10:

    间隔约束

  2. 添加你的中间视图(在这里,一个button)。 给它一个“容器中的水平中心”约束。 然后select中间视图和间隔视图,并给他们一个“垂直中心”约束:

    中间视图约束

请注意,如果在IB显示正确的指导方针时放弃中间视图,则会为您设置这些限制。

您可以通过为后代(而不是兄弟和祖先)resize并在IB中调整根视图的大小来进行testing。 中间的观点将保持在顶级拥抱的观点和超级观点的底部之间:

4英寸的屏幕尺寸

短视图