UITableViewCell +dynamic高度+自动布局

我来自这个伟大的答案:
在UITableView中使用自动布局来实现dynamic单元格布局和可变行高

我已经实现了这个答案中描述的东西,但是我面对一个不同的场景。 我没有一个UILabel但我有一个dynamic的UILabel列表。

我创build了一个图像,显示了表视图应该看起来的一些不同情况:

在这里输入图像说明

在repo的当前状态下,单元格不会垂直增长以适合单元格的contentView


UPDATE

REPO: https : //github.com/socksz/DynamicHeightCellAutoLayout

如果您试图从回购项目中获得项目并运行它,您可以确切地看到我所指的是什么问题。 我不能得到让它工作的缺失。

这里的问题是你正在使用的第三方组件,FXLabel,而不是任何周围的表视图或自动布局的代码。 为了支持自动布局,UIView的自定义子类必须适当地实现-[intrinsicContentSize]方法,然后在改变它时调用-[invalidateIntrinsicContentSize]

在这种情况下,FXLabel似乎依赖于上述方法的超类实现(UILabel),并且由于UILabel没有devise成以FXLabel实现的方式处理可变行间距,所以它不知道返回正确的intrinsicContentSize ,因此自动布局计算是错误的(在这种情况下,因为内在内容太小)。 查看这个优秀的obcj.io文章 “启用自动布局的自定义视图”部分的更多细节。

现在好消息是,从iOS 6起,您应该可以使用标准UILabel中的归因string来完成此操作。 看看这里堆栈溢出的答案 。

如果由于某种原因,你真的很喜欢FXLabel,也许你可以在GitHub项目上打开一个问题(或者尝试自己修复并提交一个pull请求)。

要设置行高和估计行高的自动尺寸,请确保以下步骤,自动尺寸有效的单元格/行高度布局。

  • 分配和实施数据源和委托
  • UITableViewAutomaticDimension分配给rowHeight&estimatedRowHeight
  • 实现委托/数据源方法(即heightForRowAt并返回一个值UITableViewAutomaticDimension它)

 @IBOutlet weak var table: UITableView! override func viewDidLoad() { super.viewDidLoad() // Don't forget to set dataSource and delegate for table table.dataSource = self table.delegate = self // Set automatic dimensions for row height table.rowHeight = UITableViewAutomaticDimension table.estimatedRowHeight = UITableViewAutomaticDimension } // UITableViewAutomaticDimension calculates height of label contents/text func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableViewAutomaticDimension } 

对于UITableviewCell中的标签实例

  • 设置行数= 0(&line break mode = truncate tail)
  • 相对于其超级视图/单元格容器设置所有约束(顶部,底部,左侧)。
  • 可选 :即使没有数据,如果您希望标签覆盖的最小垂直面积,请设置标签的最小高度。

在这里输入图像说明