让 UITableViewCell 使用自动布局调整自身大小
Posted
技术标签:
【中文标题】让 UITableViewCell 使用自动布局调整自身大小【英文标题】:Have UITableViewCell resize itself with autolayout 【发布时间】:2013-08-27 23:47:08 【问题描述】:我在 UITableViewCell
中有 3 个标签,并设置了标签,以便它们自动换行。如果他们自动换行,则文本将进入下一个单元格。如何让 AutoLayout 根据内容展开单元格,而无需在 heightForRowAtIndex
方法中编写代码?难道没有一个约束我可以用来根据 contentView 自动调整单元格吗?
如果文本不包含在标签中,则单元格看起来很好。一旦包裹起来,就是问题发生的时候,我想让单元格调整大小以适应内容,并且底部标签和底部之间的间距与顶部和顶部标签之间的间距相同。
【问题讨论】:
【参考方案1】:很遗憾,您不能这样做。表格视图首先计算自己的总高度,并且在加载时对每个单元格的大小有一个固定的概念,它不会从外向内确定它的高度,也不会让布局约束改变单元格的高度。
如果您考虑表格是如何工作的,以及单元格重用,那么如果不加载每个单元格并将其添加到滚动视图,并对整个内容执行布局传递,您就无法真正根据其单元格调整表格大小。这可能会导致性能很差。
您可以尝试填充“空闲”单元格(即您刚刚实例化的单元格,未添加到表中)并在计算 heightForRow 时为数据源中的每一行布置它。
【讨论】:
我自己使用一个空闲的单元格。但最好使用几个单元格,或者您自己管理表格视图中的单元格数量。 当您说免费单元格时,您的意思是在代码中创建它?所以我想我需要做label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding
那将是单元格的高度?还是我需要为每个单元格做 constraintToSize?
我的意思是,在代码中创建一个单元格,填充它,然后调用 [layoutIfNeeded] 来确定大小。如果您的约束设置正确,那么这应该计算出显示内容所需的单元格的确切大小。【参考方案2】:
在加载单个单元格时,在填充标签之后,但在加载单元格实例之前,请检查标签高度。
Something like:
cell.frame.size.height
如果高度足够大,您知道标签已经换成了两行,那么增加您要加载的单元格的高度。
【讨论】:
以上是关于让 UITableViewCell 使用自动布局调整自身大小的主要内容,如果未能解决你的问题,请参考以下文章
UITableViewCell 的 nib 文件中的自动布局
如何让 UITableViewCell 中的 imageView 大小固定