具有动态大小的 Cell 的复杂 AutoLayout

Complex AutoLayout for Cell with dynamic size

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

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

在 Storyboard 中看起来是这样的。

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

Demo project.

如何设置约束条件?

非常感谢您!

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

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

这里是 link 和 project。 我将尝试解释我是如何添加约束的,以便它更有意义。

  • 首先,您有视图 B,它需要与 contentView 一样大。为此,您将 top/bottom/left/right 约束添加到 superView。因为您使用的是自动维度,所以如果您添加所有优先级为 1000(最大)的约束,您将在 运行 时遇到一些约束错误。这是因为,在可以自动计算像元大小之前,它为零,因此约束崩溃了。因此,我将 top 和 trailing space 的优先级设置为 999,这样您就不会再看到错误日志了。结果是一样的
  • 然后视图C需要(顶部或底部)/left/right和高度限制
  • 然后您需要为标签添加约束条件。由于您需要正确的多行,因此约束需要为此特定情况指定垂直布局。所以,你有如下:第一个标签:top/left 命名标签和超级视图的权利。其他都是top到上一个,bottom到下一个。
  • 对于不需要调整大小的标签,您只需要前导 space 到父级,水平 space 到正确的标签和静态宽度。此外,您将需要一个约束来将顶部与右侧的标签对齐。

这是我得到的结果:

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