带有autoLayout的可变数量子视图的UITableViewCell的动态高度

时间:2014-08-25 17:11:40

标签: ios uitableview ios-autolayout

我处于这样一种情况,我希望UITableViewCells具有可变数量的子视图,具体取决于数据。显然,这会导致每个细胞的动态高度。我研究并在Using Auto Layout in UITableView for dynamic cell layouts & variable row heights发现了一篇非常好的帖子。 github上的Sample项目显示了如何计算具有固定数量子视图的单元格的高度,即两个UILabel,其中一个标签是多行的。我理解,但在我的情况下,这些标签的数量会有所不同。

我的第一种方法是我可以在Cell的contentView中添加UIView,然后在它们可用时在该视图中添加所有UILabel。 (可能在计算heightForRowAtIndexPath时)。然后在tableViewCell的子类的UpdateConstraints中添加所有必需的约束,并希望UIView将展开以获取其中所有UILabel的组合高度。但这似乎是这样做的。我知道UIView没有计算intrinsicContentSize。但是我们现在如何确保它需要它的子视图的大小。

我尝试的第二种方法是直接在单元格的内容视图中添加UILabel。这适用于某些标签,但对于某些标签来说它只是混乱。

我想我在这里遇到两个主要问题:

  1. 我应该何时创建单元格的动态子视图?

  2. 如何动态调整内部的UIView(不是UILabel) UITableViewCell基于它的subViews的intrinsicSize。

  3. 我可以在这里使用可重复使用的单元格标识符,因为每行都有效 根据内容独特。
  4. 我正在使用@ https://github.com/smileyborg/TableViewCellWithAutoLayout

    提供的@smileyborg代码

1 个答案:

答案 0 :(得分:4)

对于适用于iOS 8或更高版本的UITableViewCell的正确动态高度计算,以下关键点非常重要。

细胞设计要点:

  1. 正确设置子视图的内容阻力优先级和内容拥抱属性,如果对扩展或崩溃有任何依赖性,请根据小区需求问题设置这些优先级的值。
  2. 对于UILabel,将noofLines = 0和内容抵抗属性设置为高,以根据内容大小根据需要使标签大小变大。
  3. 如果内容大小小于单元格中的实际大小,可以考虑多少崩溃,可以通过内容拥抱优先级来适应。
  4. 子视图之间的间隔大小取决于您的愿望
  5. 满足这些要点后

    heightForRowAtIndexPath estimatedHeightForRowAtIndexPath 委托方法返回 UITabelViewAutomaticDimention , 希望,这有效!