Usted simplemente tiene que utilizar la vista de tabla para controlar la altura. Puede decirle a la tabla que una celda se ha alterado utilizando las llamadas para eliminar y luego volver a agregar celdas específicas, para que no tenga que volver a cargar toda la tabla, pero la altura debe buscarse mediante la tabla de devolución de delegadosView: heightForRow: atIndexPath:
No veo por qué esto no es práctico. Puede ejecutar cualquier cantidad de sistemas de sincronización que actualicen un caché de altura central en manos del delegado de la vista de tabla: cada vez que cree una celda puede asignarla al delegado como referencia para que pueda comunicarse de nuevo con la mesa y sabe que las celdas necesitan recarga y cuáles son las nuevas alturas.
Si lo piensas bien, la mala vista de tabla es una vista de desplazamiento que tiene que administrar todas estas celdas separadas y mantenerlas juntas visualmente, por lo que es desagradable una celda irse y comenzar a alterar marcos sin dejar pasar la tabla ver saber lo que está pasando de todos modos. Lo mejor es dejar que la mesa conduzca y decirle qué hacer.
Sí, si llama a [tableView reloadData] llamará al método de delegado 'tableView: heightForRow: atIndexPath:' donde tendrá la oportunidad de calcular las alturas de celdas adecuadas en función de sus datos. Sin embargo, tenga en cuenta que esto puede ser costoso en términos de rendimiento de desplazamiento si tiene celdas muy altas o muchas de ellas. – runmad
Por eso la parte de caché de altura es realmente importante, por lo que no tiene que trabajar mucho para decirle al sistema qué alturas tiene. –
No necesita llamar a [tableView reloadData], como sugiere Canada Dev. Más bien, puede llamar a [tableView beginUpdates]; [tableView endUpdates]; lo que provocará que tableView vuelva a medir cada celda (call heightForForForRow: atIndexPath: para cada celda) sin volver a cargar cada celda. – TomSwift