使用约束来保持两个TableViews相同的高度&同一距离

时间:2013-10-01 04:42:47

标签: ios uitableview ios7 uistoryboard nslayoutconstraint

背景/我想做什么

  • 我正在为iOS 7构建这个
  • 我正在使用StoryBoard
  • 我有两个UITableViews,我希望保持相同的高度 距离分开,保持3.5&之间的视觉一致性4英寸设备
  • 所以,从4英寸屏幕转换到3.5英寸屏幕,我想:
  • 表格视图缩短但高度保持不变
  • 使顶部表格视图保持相同的y pos
  • 对于底部表格视图,将其y pos向上移动以保持顶部表格视图底部与底部表格视图顶部之间的相同距离。 AKA他们之间的差距相同

enter image description here

我尝试过什么

  • 使用故事板中的Pin图标我已选择两个TableView并将其高度设置为相等,并将此代码包含在视图控制器中:
  

[self.topTableView addConstraint:[NSLayoutConstraint   constraintWithItem:self.bottomTableView   属性:NSLayoutAttributeBottom relatedBy:0   toItem:self.bottomTableView属性:NSLayoutAttributeTop   乘数:1常数:30]];

问题

  • 如何保持相同的高度,同时保持相同的距离

更新

enter image description here

2 个答案:

答案 0 :(得分:3)

查看Apple suggested way to do this(在标题为“在视图之间创建相等间距”的部分)。

  

编辑: Apple现在倾向于使用堆栈视图来实现此目的。请参阅this WWDC 2013 video for OS Xthis iOS one from WWDC 2015

它们不提供仅限制的解决方案。相反,他们建议在您的可见视图之间放置隐藏的“间隔视图”。

这背后的原因源于约束系统的运作方式。约束关系总是严格地在两个对象之间。在间距约束中,之间的关系必须介于正在间隔的事物和它的X空间之间。而已。第三种关系没有空间使空间(本身就是关系的结果)等于某个其他值。

另一方面,高度(和宽度)约束不是关系。您可以使用与其他任何内容无关的简单常量来设置事物的高度。因此,有“空间”来指定与另一个对象的关系 - 例如,高度应该等于另一个高度(或宽度,或其他)。

因此,如果您发现自己想要以某种方式相互关联的约束,请查看高度和宽度而不是空格。在您的特定示例中,您可以使用隐藏的UITableView s围绕UIView s,将它们的高度设置为相等,将它们的空间设置为0或其他低常量的邻居/容器。

作为额外的奖励,这在IB中是可能的。无需自定义代码或子类。

答案 1 :(得分:0)

顶部表视图应该具有对超视图顶部(或顶部布局约束)的约束,对底部表视图的垂直间距约束以及高度约束。底部表视图应该具有对superview底部的约束,并且具有与顶部表视图相等的高度约束。你需要的关键是使顶级表格视图的高度约束的优先级小于1000,这样当屏幕高度发生变化时,一件事情不是强制性的(即< 1000高度约束)将是调整的东西。所有这些都可以在IB中设置。

编辑后:

实际上,您根本不需要顶部表视图上的高度约束。由于我对superview的顶部和底部都有约束,以及两个表视图之间的约束,因此只需要一个使表视图高度相等的约束即可。