2

背景/我想做什么

  • 我正在为 iOS 7 构建这个
  • 我正在使用故事板
  • 我有两个UITableViews,我想保持相同的高度和距离,以保持 3.5 和 4 英寸设备之间的视觉一致性
  • 所以在从 4 英寸屏幕到 3.5 英寸屏幕的转变中,我想要:
  • 表格视图变短但高度保持相等
  • 让顶部表格视图保持相同的 y pos
  • 底部表格视图将其 y 位置向上移动以保持顶部表格视图底部和底部表格视图顶部之间的距离相同。又名他们之间的相同差距

在此处输入图像描述

我试过的

  • 使用情节提要中的 Pin 图标,我选择了两个 TableView 并将它们的高度设置为相等,并将此代码包含在视图控制器中:

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

问题

  • 如何在保持相同距离的同时保持它们相同的高度

更新

在此处输入图像描述

4

2 回答 2

3

查看Apple 建议的方法(在标题为“在视图之间创建相等间距”的部分中)。

编辑:苹果现在赞成为此目的使用堆栈视图。请参阅OS X 的此 WWDC 2013 视频WWDC 2015 的此 iOS视频

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

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

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

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

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

于 2014-01-19T18:53:11.600 回答
0

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

编辑后:

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

于 2013-10-01T05:00:06.503 回答