如何动态调整UITableViewCell高度

ara*_*aid 57 iphone resize uitableview uitextview

我有经典的UITableView分组,每个单元格内都有可编辑的UITextViews.这个文本视图可以是单行或多行的,我希望单元格在用户写入时增加其高度,文本开始换行.

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

我一直在搜索,以前的答案和教程只是讨论如何计算文本高度,如何实现heightForRowAtIndexPath ...我已经知道的事情.我担心的是,为了达到我想要的效果,每次用户输入一个新角色时,我都必须计算高度并重新加载表格,我觉得这个角色并不干净或高效.

谢谢.

And*_*rev 85

[tableView beginUpdates];
[tableView endUpdates];
Run Code Online (Sandbox Code Playgroud)

  • 尝试一下,这段代码强制UITableView只重新加载单元格大小,而不是单元格内容. (15认同)

ric*_*son 62

您不必总是重新加载整个表.您只需重新加载那一行即可.

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
Run Code Online (Sandbox Code Playgroud)

  • 我遇到了一个很大的问题...我的单元格中有一个TextField,并且调用reload(任何东西)会导致我的textfield辞退第一响应者状态.有任何想法吗? (3认同)

Elf*_*red 27

更具体地讲,是的,你必须实现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];
}
Run Code Online (Sandbox Code Playgroud)


win*_*son 5

-reloadRowsAtIndexPaths:withRowAnimation即使我改变了Cell的框架,也没有调整UITableViewCell高度的大小.它只有在我跟着它时才有效-reloadData:

[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationFade];
[tableView reloadData];
Run Code Online (Sandbox Code Playgroud)