我在顶级视图中包含两个子视图.我想将第一个子视图的垂直距离固定在屏幕顶部(我能够完成这一点 – 垂直空间约束的常见用例).我想要第二个子视图在第一个子视图的底部和屏幕底部之间的距离的中心浮动(垂直).这个想法是,该设计对iPhone 3.5“vs 4”的尺寸有所反应.@H_301_3@
我无法定义一个约束或一组约束来实现这一点.@H_301_3@
我已经尝试在第二个子视图和它的邻居顶部(第一个子视图)之间的垂直间距约束和超级视图的底部设置不等式,并且利用这些约束的优先级.@H_301_3@
在SO的其他一些相关帖子中提出的一个想法是使用固定在屏幕底部的容器,以及固定到第一个子视图的底部边缘,然后将我的第二个子视图放在容器.我希望尽可能避免复杂的视图层次结构,但也许这是不容易避免的.@H_301_3@
任何想法或建议?@H_301_3@
解决方法
This answer描述了如何在Xcode 6.0中执行此操作(可能在Xcode 5.0和5.1中使用).@H_301_3@
原版的@H_301_3@
如果要使用自动布局进行此操作,则必须至少添加一个间隔视图.它不必是垂直中心视图(或任何其他视图)的超级视图,因此它对您的视图层次结构有一个很小的影响.@H_301_3@
我建议不要在Xcode 4.6.3中的Interface Builder中设置约束.这太痛苦了但是如果你真的要这样做,这是可行的.@H_301_3@
>从顶部拥抱视图的下边缘到超级视图的下边缘创建一个间隔(一个普通的旧UIView).将其设置为隐藏.给顶层拥抱视图和根视图的左下边缘限制,并固定其宽度.我的间隔宽度是10:@H_301_3@
>添加中间视图(这里是一个按钮).给它“容器中的水平中心”约束.然后选择中间视图和间隔视图,并给它们一个“垂直中心”约束:@H_301_3@
@H_301_3@
请注意,如果您在IB显示正确的准则时放弃中间视图,则会为您设置这些约束.@H_301_3@
您可以通过启用对后代(但不是兄弟姐妹和祖先)进行调整大小并调整IB中的根视图来进行测试.中间视图将保持在顶级拥抱视图和超级视图底部之间的中心位置:@H_301_3@
@H_301_3@
@H_301_3@