【发布时间】:2015-03-26 00:06:31
【问题描述】:
我已经观看了 2012/13/14 和 CS193P 的所有相关 Autolayout WWDC 视频,以及来自其他一些可信来源的教程。使用这些知识和一些尝试和错误,我已经能够使用 Autolayout 创建一些相当复杂的屏幕,但有时我遇到了一个绊脚石,这表明我对 Autolayout 的理解并不完整。所以我重新创建了一个我能想到的最简单的场景来展示一个非常有用的问题:
在这种情况下,我们有两种观点:
- 左视图固定在屏幕的顶部、底部和左侧
- 右视图固定在屏幕的顶部、底部和右侧
- 两个视图之间存在水平间距约束
垂直定位由顶部和底部约束确定,没有错误,但视图都报告“缺少约束”,因为它们“需要约束:X 位置或宽度”。
我认为左视图的 X 位置是通过固定到左侧来确定的,并且它的宽度会根据需要增加/缩小,以便在其自身和固定到右侧的视图之间仍有空间对。
我可以看到 Autolayout 知道 哪些 视图会增长以满足另一个视图是一个问题 - 但我认为通过给一个视图更高的视图来解决这个问题水平抗压优先(或水平拥抱)。更耐压缩或具有更高拥抱值的视图将保持其在 Canvas 中的宽度,而另一个视图将更改其宽度以满足约束。更改这些优先级值不会影响缺少的约束错误。
从屏幕截图中可以看出,在左侧的“错位视图”部分中,有一个视图的预期宽度是其画布值的两倍以上,还有一个视图的预期宽度为 0。这与我们需要对宽度进行约束的错误相匹配,但为什么呢?
我相信理解为什么会这样有助于理解更复杂的自动布局关系。提前致谢!
【问题讨论】:
-
抗压性和拥抱优先级适用于由视图内容确定的视图尺寸。由于您的视图是空的,因此 Autolayout 没有任何“线索”来指导视图的大小。尝试在您的两个视图中添加一些标签并对其大小设置一些约束,并且应该解决缺少的约束
-
这里是帮助你理解自动布局的帖子slicode.com/…
标签: ios xcode interface-builder autolayout