背景/我想做什么
UITableViews
,我希望保持相同的高度
距离分开,保持3.5&之间的视觉一致性4英寸设备
我尝试过什么
[self.topTableView addConstraint:[NSLayoutConstraint constraintWithItem:self.bottomTableView 属性:NSLayoutAttributeBottom relatedBy:0 toItem:self.bottomTableView属性:NSLayoutAttributeTop 乘数:1常数:30]];
问题
更新
答案 0 :(得分:3)
查看Apple suggested way to do this(在标题为“在视图之间创建相等间距”的部分)。
编辑: Apple现在倾向于使用堆栈视图来实现此目的。请参阅this WWDC 2013 video for OS X和this iOS one from WWDC 2015
它们不提供仅限制的解决方案。相反,他们建议在您的可见视图之间放置隐藏的“间隔视图”。
这背后的原因源于约束系统的运作方式。约束关系总是严格地在两个对象之间。在间距约束中,之间的关系必须介于正在间隔的事物和它的X
空间之间。而已。第三种关系没有空间使空间(本身就是关系的结果)等于某个其他值。
另一方面,高度(和宽度)约束不是关系。您可以使用与其他任何内容无关的简单常量来设置事物的高度。因此,有“空间”来指定与另一个对象的关系 - 例如,高度应该等于另一个高度(或宽度,或其他)。
因此,如果您发现自己想要以某种方式相互关联的约束,请查看高度和宽度而不是空格。在您的特定示例中,您可以使用隐藏的UITableView
s围绕UIView
s,将它们的高度设置为相等,将它们的空间设置为0
或其他低常量的邻居/容器。
作为额外的奖励,这在IB中是可能的。无需自定义代码或子类。
答案 1 :(得分:0)
顶部表视图应该具有对超视图顶部(或顶部布局约束)的约束,对底部表视图的垂直间距约束以及高度约束。底部表视图应该具有对superview底部的约束,并且具有与顶部表视图相等的高度约束。你需要的关键是使顶级表格视图的高度约束的优先级小于1000,这样当屏幕高度发生变化时,一件事情不是强制性的(即< 1000高度约束)将是调整的东西。所有这些都可以在IB中设置。
编辑后:
实际上,您根本不需要顶部表视图上的高度约束。由于我对superview的顶部和底部都有约束,以及两个表视图之间的约束,因此只需要一个使表视图高度相等的约束即可。