如何动态调整UITableViewCell高度
我在每个单元格内都有经典的UITableView编组UITableView。此文本视图可以是单行或多行,并且我希望单元格随着用户写入和文本开始新行而增加其高度。如何动态调整UITableViewCell高度
我的问题是:我是否需要重新加载整个表格才能增加单元格的高度?没有其他方法吗?
我一直在寻找很多东西,以前的答案和教程只是谈论如何计算文字高度,如何实现heightForRowAtIndexPath ...我已经知道的东西。我担心的是,为了达到我想要的水平,我将不得不计算身高,并在用户每次输入一个新字符时重新加载表格,而我发现这个字符并不十分干净或高效。
谢谢。
您不必总是重新加载整个表格。你可以改为重新加载一行。
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
更具体地讲,是的,你必须实现tableView:heightForRowAtIndexPath:
来计算新的高度,然后做的rickharrison说,并呼吁[tableView reloadRowsAtIndexPaths:withRowAnimation]
。假设你的细胞可以有一个扩大的高度和一个正常的高度,并且你希望它们在点击时增长。你可以这样做:
-(CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*) indexPath
{
if ([expandedPaths containsObject:indexPath]) {
return 80;
} else {
return 44;
}
}
-(void)tableView:(UITableView*) didSelectRowAtIndexPath:(NSIndexPath*) indexPath
{
[expandedPaths addObject:indexPath];
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
}
[tableView beginUpdates];
[tableView endUpdates];
试一下,这段代码强制UITableView重新加载单元大小,但不是单元格内容。 – 2011-06-28 11:43:26
虽然这基本上起作用,但如果将单元格增长为使用自动行转换重新加载单元格时,它不会产生动画的平滑效果。 – 2012-02-22 04:08:25
太棒了。如果你想在你的某些行上使用动画,可以使用它和reloadRowsAtIndexPaths一起使用。 – 2013-05-08 06:12:49
-reloadRowsAtIndexPaths:withRowAnimation
没有调整的UITableViewCell高度,即使我改变了细胞的框架。它只有当我跟着它-reloadData
:
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView reloadData];
也许你引用了错误的indexPath,如果你调试了应用程序,你清楚地看到在你调用tableView之后reloadRowsAtIndexPath:实际调用tableView:heightForRowAtIndexPath方法。 – 2015-04-08 22:58:01
谢谢!但我现在有另一个问题:我只是想重新加载该行来增加它的大小,我不希望单元格内容被再次实例化。但是,dequeueReusableCellWithIdentifier:@“customid”仅在第二次调用后才开始重用。 我该怎么办? – araid 2010-06-22 11:55:48
@rickharrison其实你可以,看看我的答案。 – 2012-10-25 08:16:02
它的工作真的很好,但单元格的内容分别增长。我怎样才能避免这种情况? – Gal 2013-04-23 08:24:14