具有动态大小的单元格的复杂自动布局

Posted

技术标签:

【中文标题】具有动态大小的单元格的复杂自动布局【英文标题】:Complex AutoLayout for Cell with dynamic size 【发布时间】:2015-05-15 21:16:36 【问题描述】:

我有一个单元格,其中包含一个包含 10 个子视图的容器(其中两个只是边界,其他是标签)。该方案看起来像这样。

动态标签可能包含大量文本,因此单元格应符合适当的大小以适应内容。问题是如何手动设置所有约束......我自己尝试了十几次,但似乎我不擅长这个。表格视图支持行高的自动尺寸并使用自定义估计高度。

在 Storyboard 中看起来是这样的。

其中蓝色视图是视图 C 的子视图。后面的灰色视图是视图 B。粗体标签是静态的,其他的是动态的。

Demo project.

如何设置约束?

非常感谢您!

【问题讨论】:

【参考方案1】:

我设法设置了您的约束,以便您获得所需的结果。这是我得到的:

我希望这是你想要的样子。

这是project 的链接。 我将尝试解释我是如何添加约束的,以使其更有意义。

首先,您有视图 B,它需要与 contentView 一样大。为此,您将顶部/底部/左侧/右侧约束添加到 superView。因为您使用的是自动尺寸,所以如果您添加优先级为 1000(最大一个)的所有约束,运行时约束会出现一些错误。这是因为,在可以自动计算像元大小之前它为零,因此约束崩溃。因此,我将顶部和尾部空格的优先级设置为 999,这样您就不会再看到错误日志了。结果是一样的。 然后视图 C 需要(顶部或底部)/左/右和高度约束 然后您需要为标签添加约束。由于您需要正确的多行,因此约束需要为这种特殊情况指定垂直布局。因此,您有以下内容:第一个标签:顶部/左侧为名称标签,右侧为超级视图。所有其他的都从上到上,从下到下。 对于不需要调整大小的标签,您只需要前导空间到父级,水平空间到右侧标签和静态宽度。此外,您还需要一个约束来将顶部与右侧的标签对齐。

这是我得到的结果:

希望我的解释有道理,如果您有任何问题,请告诉我。祝你的项目好运!

【讨论】:

非常感谢!但是我该如何处理内容拥抱优先级?如果第一个 UILabel 有一个巨大的文本,但所有其他的都没有,那么第一个标签不会完全显示文本。文本被自动换行... 谢谢,我解决了! ***.com/questions/30276663/…

以上是关于具有动态大小的单元格的复杂自动布局的主要内容,如果未能解决你的问题,请参考以下文章

具有自动布局的自定义单元格的动态高度

使用自动布局约束动态调整表格视图单元格的大小

使用自动布局自定义集合视图单元格的动态高度

如何通过自动布局设置集合视图单元格大小

具有自动布局约束的 UITableViewCell 子类大小不正确

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度