4

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

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

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

我想我在这里与两个主要问题作斗争:

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

  2. 如何根据它的 subViews 的 intrinsicSize 在 UITableViewCell 内动态调整 UIView(不是 UILabel)的大小。

  3. 我可以在这里使用可重复使用的单元格标识符吗?因为每一行根据内容都是唯一的。

我正在使用 @smileyborg 在https://github.com/smileyborg/TableViewCellWithAutoLayout提供的代码

4

1 回答 1

4

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

单元设计要点:

  1. 适当设置子视图的内容抵抗优先级和内容拥抱属性,如果出现任何关于展开或折叠的依赖关系,请根据单元格需求问题设置这些优先级的值。
  2. 对于 UILabel ,设置 noofLines = 0 和 content resistance 属性 high 以根据内容大小在需要时使标签大小变大。
  3. 如果内容大小小于单元格中的实际大小,可以考虑折叠多少,可以通过内容拥抱优先级来适应。
  4. 子视图之间的间距大小取决于您的意愿

满足这几点后

heightForRowAtIndexPath返回UITabelViewAutomaticDimentionestimatedHeightForRowAtIndexPath 代表方法,希望这行得通!

于 2015-12-05T11:10:47.957 回答