Cómo redimensionar dinámicamente la altura de UITableViewCell

Tengo el clásico UITableView agrupado con UITextViews editable dentro de cada célula. Estas vistas de texto pueden tener una sola línea o múltiples líneas, y quiero que la celda aumente su altura a medida que el usuario escribe y el texto comienza una nueva línea.

Mi pregunta es: ¿necesito volver a cargar toda la tabla solo para boost la altura de una celda? ¿No hay otro método?

He estado buscando mucho, y las respuestas y tutoriales anteriores solo hablan sobre cómo calcular la altura del texto, cómo implementar heightForRowAtIndexPath … cosas que ya sé. Mi preocupación es que, para lograr lo que deseo, tenga que calcular la altura y volver a cargar la tabla cada vez que el usuario ingrese un nuevo personaje, que no me parece muy limpio ni eficiente.

Gracias.

No siempre tienes que volver a cargar toda la tabla. En su lugar, solo puedes volver a cargar esa fila.

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

Para ser más específico, sí, tienes que implementar tableView:heightForRowAtIndexPath: para calcular la nueva altura, haz lo que dice rickharrison y llama a [tableView reloadRowsAtIndexPaths:withRowAnimation] . Digamos que sus celdas pueden tener una altura expandida y una altura normal, y usted desea que crezcan cuando se toca. Tu puedes hacer:

 -(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 no redimensionó la altura de UITableViewCell, incluso después de que cambié el marco de la celda. Solo funcionó cuando lo seguí con -reloadData :

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