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

时间:2015-05-15 21:16:37

标签: ios swift autolayout constraints nsautolayout

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

enter image description here

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

在Storyboard中,它看起来就是这样。

enter image description here

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

Demo project

如何设置约束?

非常感谢你!

1 个答案:

答案 0 :(得分:1)

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

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

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

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

这是我得到的结果:

希望我的解释有意义,如果您有疑问,请告诉我。祝你的项目好运!