Como resize dinamicamente a altura do UITableViewCell

Eu tenho o UITableView agrupado clássico com UITextViews editáveis ​​dentro de cada célula. Essas exibições de texto podem ser únicas ou com várias linhas, e eu quero que a célula aumente sua altura à medida que o usuário escreve e o texto inicia uma nova linha.

Minha pergunta é: preciso recarregar a tabela inteira apenas para aumentar a altura de uma célula? Não há outro método?

Eu tenho procurado muito, e respostas anteriores e tutoriais apenas falam sobre como calcular a altura do texto, como implementar heightForRowAtIndexPath … coisas que eu já sei. Minha preocupação é que, para conseguir o que quero, terei que calcular a altura e recarregar a tabela toda vez que o usuário inserir um novo caractere, o que não acho muito limpo ou eficiente.

Obrigado.

Nem sempre é necessário recarregar a tabela inteira. Você pode, em vez disso, apenas recarregar essa linha.

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

Para ser mais específico, sim, você precisa implementar tableView:heightForRowAtIndexPath: para calcular a nova altura, faça como o rickharrison diz e chame [tableView reloadRowsAtIndexPaths:withRowAnimation] . Vamos dizer que suas células podem ter uma altura expandida e uma altura normal, e você quer que elas cresçam quando tocadas. Você pode fazer:

 -(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 não redimensionou a altura do UITableViewCell, mesmo depois que eu alterei o quadro da célula. Só funcionou quando eu segui com um -reloadData :

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