自动布局不是那么自动

Posted

技术标签:

【中文标题】自动布局不是那么自动【英文标题】:Auto Layout Not So Auto 【发布时间】:2015-01-16 20:01:08 【问题描述】:

我有最基本的设置。见图1:

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

我已经查看了文档和支持HERE,但没有任何结果。我总共花了大约 24 小时来研究它并学到了很多东西,所以我的努力​​并不顺利。 我知道通过“添加缺少的约束”,这些约束只是基于当前设置的建议,它们并非在所有情况下都是具体的,所以我在查看后尝试使用控制拖动创建自己的文件,但我的设置没有不同的结果,而且成倍地草率。所以我决定在下面包含 Xcode 填充的约束:

UIWebView 约束

自定义 UIView(工具栏)约束

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

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

只为回答者@Matt:

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

-16 用于前导空格/尾随空格在我的情况下作为真正的工具栏仿真结果,没有突出的警告或问题。谢谢

【问题讨论】:

有什么问题?我在这里的所有谈话中找不到具体问题。 嘿@matt 这个问题不是问题。更多的是一种说法。我的自动布局约束不起作用。我添加了自己的约束,而不是使用“添加缺失”,但它仍然会导致 UIView 被推离屏幕。本质上是问,我需要做什么才能使它不会被推离屏幕或失去框架 嗯,Stack Overflow 是关于问题,而不是陈述。如果您有具体问题,请务必提出。 “更糟”不是问题描述。清楚地说出正在发生的事情、你的愿望以及你尝试过的事情。给你一点时间和思考来构建你的问题。这将使您更容易获得帮助(如果您需要帮助)。谢谢! @matt 我想更好的问题是:如何让我的 UIView 模拟工具栏? 我们能谈谈您为什么不想要一个实际的工具栏吗? :) 【参考方案1】:

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

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

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

它负责水平位置和大小。

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

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

【讨论】:

你最好的。你真的是。我修复了我的限制,现在一切正常。但是请查看我编辑的问题,您的知识现在很丰富,我是来学习的。您能否提供关于为什么像 xCode 一样将约束设置为 -16 有效但常量 0 无效的输入?什么时候常数 0 对我更有意义?顺便说一句,问题是我添加了一个顶部布局约束,这导致它向下推,我没有意识到你可以省略一个,我认为所有 4 个都是串联使用的。根据您的推荐省略它后,它是一个迷人的人! 你被页边距搞砸了。在这里查看我的答案:***.com/a/27976007/341994

以上是关于自动布局不是那么自动的主要内容,如果未能解决你的问题,请参考以下文章

约束/自动布局栏隐藏,Xcode 6

UGUI笔记5-自动布局

每个设备是不是可以有一个布局而不是自动布局?

旋转视图是不是与自动布局兼容?

动态 UITableView 标头(不是节标头)自动布局问题

纵向而不是横向的自动布局方向更改