2013-08-27 58 views
3

我在UITableViewCell中有3个标签,并且设置了标签,以便它们可以进行字符封装。如果他们自动换行,文本会进入下一个单元格。如何让AutoLayout根据内容扩展单元而不必在heightForRowAtIndex方法中编写代码?没有一个约束可以用来根据contentView自动调整单元格吗?让UITableViewCell使用自动布局调整自身格式

enter image description here enter image description here

细胞看起来不错,如果文本没有在标签包裹。一旦它出现问题,并且我希望将单元格调整为适合内容,并且底部标签和底部之间的间距与顶部和顶部标签之间的间距相同。

回答

2

不幸的是,你不能这样做。表格视图首先计算其自身的总高度,并且在加载时对每个单元格的大小有一个固定的概念,它不会从外部确定它的高度,也不会让布局约束条件改变单元格的高度。

如果你仔细想想表是如何工作的,与细胞再利用,那么你就无法真正从大小的细胞表而不加载于每个细胞并将其添加到滚动视图,并执行对整个事情的布局传递。这可能会导致相当差的表现。

在计算heightForRow时,您可以尝试填充“空闲”单元格(即刚刚实例化的单元格,而不是添加到表格)并将其放在数据源中的每一行。

+0

我自己使用一个自由单元格。但最好用一些单元格,或者如果您自己管理表格视图中的单元格数量。 – Abizern

+0

当你说空闲单元你意味着在代码中创建它?所以我想我需要做'label1.size.height + label2.size.height + label3.size.height + topPadding + bottomPadding',那将是单元格的高度?或者我是否需要为每个单元格执行constraintToSize? – Bot

+0

我的意思是,在代码中创建一个单元格,填充它并调用[layoutIfNeeded]来确定大小。如果您的约束设置正确,那么这应该计算显示您的内容所需的单元格的确切大小。 – jrturton

0

当您在加载单个单元格时,在填充标签之后,但在加载单元格实例之前,请检查标签高度。

Something like: 
    cell.frame.size.height 

如果高度足够大,以至于您知道标签已包装为两行,则请增加要加载的单元格的高度。