如何dynamic调整UITableViewCell的高度

我有每个单元格内的经典分组的UITableView与可编辑的UITextViews。 这个文本视图可以是单行或多行的,我希望单元格随着用户写入而增加高度,文本开始一个新行。

我的问题是: 是否需要重新加载整个表格才能增加单元格的高度? 没有其他方法吗?

我一直在寻找很多,以前的答案和教程只是谈论如何计算文字高度,如何实现heightForRowAtIndexPath …我已经知道的东西。 我担心的是,为了达到我想要的效果,每当用户input一个新的angular色,我都不得不计算高度和重新加载表格,而这个angular色并不是很干净或者很有效率。

谢谢。

您不必总是重新加载整个表格。 你可以改为重新加载一行。

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; 
 [tableView beginUpdates]; [tableView endUpdates]; 

更具体地说,是的,你必须实现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]; } 

-reloadRowsAtIndexPaths:withRowAnimation即使在更改单元格框架之后, -reloadRowsAtIndexPaths:withRowAnimation也没有调整UITableViewCell高度的大小。 它只有当我跟着一个-reloadData

 [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade]; [tableView reloadData];