自动布局约束未按预期工作

Posted

技术标签:

【中文标题】自动布局约束未按预期工作【英文标题】:Auto-layout constraints not working as expected 【发布时间】:2015-10-09 08:29:40 【问题描述】:

我有一个 UITableViewCell,它有一个子视图,其中有一个图像视图和一个标签。我想使用子视图作为在单元格内容周围提供一些边距的方法,从而在单元格之间提供边距。这似乎是很多人在网上推荐的方式。

我已经设置了如下所示的约束:

我已经对视图控制器中的所有视图执行了更新帧。故事板完全按照我在电话上的预期显示它。当我在手机上运行它时,我得到了这个......

在这一点上我完全感到困惑。我花了两天时间阅读并尝试布局一个简单的 UITableViewCell,但显然对自动布局的工作原理还没有很好的理解。

我什至只是沿着建议的边界(蓝线)布置了所有内容,然后告诉情节提要生成建议的约束。此时单元格的内容刚刚发送,其中 50% 离开屏幕右侧且不可见。

那么两个问题:

故事板经常向我展示一些在我的实际设备上没有准确表示的东西。这在 ios 开发中相当普遍吗?我应该完全不依赖故事板自动布局表示吗?

为了让单元格在我的设备上进行布局,我必须对这些约束做些什么,就像此时在我的故事板中显示的那样?我设置错了什么约束?

【问题讨论】:

我不认为您的问题出在表格单元格中,它们看起来不错,我认为问题出在 TableView 本身。看起来您已将其限制在 600 大小的故事板的边缘。 我不应该把它限制在边缘吗? 是的,你应该这样做,但你不希望它一直是 600 宽,这就是它看起来正在发生的情况。我不确定你的约束是什么,但如果你有一个固定的宽度约束,那可能会导致你看到的问题。 我不相信我在表格视图上有一个固定的宽度。我暂时希望 UiTableView 成为所有设备上的全宽。所以我限制在前缘和后缘。我会尝试消除这些限制,看看它是如何工作的 【参考方案1】:

Storyboard 默认不根据任何设备显示内容。您可以在其尺寸属性中将其设置为您当前的设备(默认为“推断”)。约束用于在所有设备上显示相同的视图。它们会根据显示大小自动调整 UIelements。因此,如果您希望您的应用在不同尺寸的设备上运行,您必须依赖约束。

我认为您设置了太多约束。如果您不熟悉自动布局,则会发生这种情况。尝试阅读this 指南。很有帮助。

【讨论】:

以上是关于自动布局约束未按预期工作的主要内容,如果未能解决你的问题,请参考以下文章

带有自动布局的 uiscrollview 的动态内容未按预期工作

UI 滚动视图未按预期滚动

SnapKit 的自动布局未按预期响应

空 UIView 上的自动布局约束无法按预期工作

程序约束未按预期工作

自动布局无法按预期工作