当UITableView和UIImageView都出现在同一个视图控制器上时,如何正确使用约束

时间:2014-12-05 15:21:41

标签: ios xcode user-interface interface-builder xcode6

假设我有以下视图控制器,这就是我想在所有iPhone上看到它的方式:

enter image description here

enter image description here

如果我在iPhone 6上运行它,它具有以下外观:

enter image description here

您可以在此注意到UITableView不适合整个屏幕,而UIImageView并未放置在屏幕底部。

如何通过XCode 6中的约束来实现所需的行为?我认为我需要以下约束:

  • 将空间和顶部空间引至UITableView
  • 的容器边距
  • 底部空间和尾随空格到UIImageView
  • 的容器边距
  • UITableViewUIImageView
  • 之间的垂直间距

但即使在自动解决限制问题之后,它也无法按预期工作:

enter image description here

提前致谢。

2 个答案:

答案 0 :(得分:1)

好的,这里有一些事情:

  • 每个视图都需要足够的约束来明确定义它的x和y位置,以及它的宽度和高度。首先,返回“界面”构建器并删除所有约束,并按照您希望的样子布局视图。您希望控制所添加的每个约束,不要让IB自动解决问题,因为在所有可能的情况下,它都不会做您想做的事情。

  • 一旦你考虑了@ 2x,@ 3x等,你有一个你希望它在屏幕上的大小的图像吗?如果是这样,那么您的工作将更容易,因为图像视图的宽度和高度可以通过图像的宽度和高度来定义(即图像视图的内在内容大小)。

  • 为了有效地使用Autolayout,您需要从整体上考虑您的观点,并考虑在屏幕大小变化时您希望视图的行为方式,并清楚地了解行为。

要实现您想要的布局,我会执行以下操作:

  1. 将tableview的前导,上边和后边缘限制在superview中,常数值为0.这意味着它可以随设备变得更宽更薄,它会水平拉伸,但始终坚持到顶部。这已经定义了tableview的x和y位置,以及它的宽度(还有高度,但是继续阅读...)

  2. 约束图像视图以匹配其超视图(x位置定义)的水平中心,并将其底边约束到超视图底边(定义的y位置)。如果您已经获得了合适规模的资产,那么这也会考虑到宽度和高度。如果没有,你可以继续给它明确的宽度和高度限制。

  3. 现在我们可以将tableview的下边缘约束到图像视图的顶部,常量为0(即触摸)。请注意,我们还没有为表格视图提供明确的高度约束,因此当设备屏幕垂直增长时,表格视图将垂直拉伸。

  4. 首先,Autolayout 很难。我建议大量阅读来克服最初的驼峰,真正了解约束正在做什么,它的局限性,以及系统解析约束将它们转换成帧的方式。这本书真的很棒,真的帮助我学习:

    http://www.amazon.co.uk/Auto-Layout-Demystified-Mobile-Programming/dp/0321967194

    祝你好运

答案 1 :(得分:1)

首先确保选择了正确的尺寸等级。 '紧凑宽度|常规高度'必须在Interface Builder中选择size类。现在将尾随空格,前导空格,顶部空间和底部空间约束添加到表视图中。对于图像视图,将视图模式设置为Aspect fit并添加约束:对齐中心Y,顶部空间,底部空间,行距空间,尾随空间和纵横比。enter image description here