假设我有以下视图控制器,这就是我想在所有iPhone上看到它的方式:
如果我在iPhone 6上运行它,它具有以下外观:
您可以在此注意到UITableView
不适合整个屏幕,而UIImageView
并未放置在屏幕底部。
如何通过XCode 6中的约束来实现所需的行为?我认为我需要以下约束:
UITableView
UIImageView
UITableView
和UIImageView
但即使在自动解决限制问题之后,它也无法按预期工作:
提前致谢。
答案 0 :(得分:1)
好的,这里有一些事情:
每个视图都需要足够的约束来明确定义它的x和y位置,以及它的宽度和高度。首先,返回“界面”构建器并删除所有约束,并按照您希望的样子布局视图。您希望控制所添加的每个约束,不要让IB自动解决问题,因为在所有可能的情况下,它都不会做您想做的事情。
一旦你考虑了@ 2x,@ 3x等,你有一个你希望它在屏幕上的大小的图像吗?如果是这样,那么您的工作将更容易,因为图像视图的宽度和高度可以通过图像的宽度和高度来定义(即图像视图的内在内容大小)。
为了有效地使用Autolayout,您需要从整体上考虑您的观点,并考虑在屏幕大小变化时您希望视图的行为方式,并清楚地了解行为。
要实现您想要的布局,我会执行以下操作:
将tableview的前导,上边和后边缘限制在superview中,常数值为0.这意味着它可以随设备变得更宽更薄,它会水平拉伸,但始终坚持到顶部。这已经定义了tableview的x和y位置,以及它的宽度(还有高度,但是继续阅读...)
约束图像视图以匹配其超视图(x位置定义)的水平中心,并将其底边约束到超视图底边(定义的y位置)。如果您已经获得了合适规模的资产,那么这也会考虑到宽度和高度。如果没有,你可以继续给它明确的宽度和高度限制。
现在我们可以将tableview的下边缘约束到图像视图的顶部,常量为0(即触摸)。请注意,我们还没有为表格视图提供明确的高度约束,因此当设备屏幕垂直增长时,表格视图将垂直拉伸。
首先,Autolayout 很难。我建议大量阅读来克服最初的驼峰,真正了解约束正在做什么,它的局限性,以及系统解析约束将它们转换成帧的方式。这本书真的很棒,真的帮助我学习:
http://www.amazon.co.uk/Auto-Layout-Demystified-Mobile-Programming/dp/0321967194
祝你好运
答案 1 :(得分:1)
首先确保选择了正确的尺寸等级。 '紧凑宽度|常规高度'必须在Interface Builder中选择size类。现在将尾随空格,前导空格,顶部空间和底部空间约束添加到表视图中。对于图像视图,将视图模式设置为Aspect fit并添加约束:对齐中心Y,顶部空间,底部空间,行距空间,尾随空间和纵横比。