自动布局不是那么自动

Auto Layout Not So Auto

我已经进行了最基本的设置。见图一:

信不信由你,这是我使用 AutoLayout 的第一个项目,我之前已经通过编程创建了所有内容。这个基本设置实际上是一个 UIWebView,底部有 1 个自定义 UIView。以前我使用的是一个工具栏,它可以为我处理所有事情,并且没有任何约束问题。但是,在将 UILongPressGesture 添加到 UIBarButtonItem 的子视图时,工具栏会产生事件处理差异,因此我决定将工具栏转换为 UIView(甚至将 UIView 插入到工具栏,它自然会转换为按钮项)以便于处理。但是 run-time,视图被推离屏幕 UIView 大小的一半(48px)参见图 2。然后当我添加按钮时,情况变得更糟:

我已经查看了文档和支持 HERE,但没有结果。我总共花了大约 24 小时研究它并学到了很多东西,所以我的努力​​没有白费。 我知道 'Adding Missing Constraints',约束只是基于当前设置的建议,并非在所有情况下都是具体的,所以我确实尝试创建自己的控制在查看文档后进行拖动,但我的设置得出的结果没有什么不同,而且更加草率。所以我决定在下面包含 Xcode 填充的约束:

UIWebView 约束

自定义 UIView(工具栏)约束

有什么可靠的起点建议吗?内在尺寸与它有什么关系吗?

编辑:工作约束 我没有意识到您可以简单地省略一个约束。罪魁祸首似乎是在顶部布局指南中添加了一个。

仅供回答者@Matt :

常量 0 结果: 边缘有小间隙

-16 for leading space/trailing space 结果在我的案例中是一个真正的工具栏仿真,没有突出的警告或问题。谢谢

让我们谈谈界面底部的视图,以及如何使用自动布局来定位和调整它的大小,就像工具栏的定位和大小一样。

要使用自动布局,您需要提供足够的信息来确定位置和大小。该视图是视图控制器主视图的子视图。主视图将根据屏幕调整大小,因此我们也想使用自动布局来调整子视图 ("toolbar") 的大小。这就是自动布局的用途!

所以将子视图的前缘约束到父视图的前缘,并将子视图的后缘约束到父视图的后缘,两者的 constant 都为 0。现在左右边缘匹配超级视图!

这会处理水平位置和大小。

现在让我们谈谈垂直位置。位置应该是底部。因此,将子视图底部边缘约束到视图控制器的底部布局指南,再次使用 constant 0。现在视图底部位于底部!

我们唯一不知道的是子视图的顶部。在我们的情况下,这与知道它的高度相同。所以给子视图一个高度约束,将它的 constant 设置为一个合理的值,比如 40,就大功告成了。