UITableViewCell con constraint updates hace que UITableView salte alnetworkingedor

Resumen

Cambiar el tamaño y volver a cargar las filas en una tablaVer donde cada celda tiene una altura dinámica calculada por las restricciones hace que muchas otras celdas se recalculan innecesariamente. ¿Cómo debería resolver esto?

Un proyecto de ejemplo se puede encontrar aquí .

Versión larga

Tengo una vista que muestra los detalles de una empresa y una cantidad variable de celdas (o tarjetas ) con información más detallada. Implementé esto en un UITableViewController con celdas de tamaño dynamic, utilizando restricciones de layout automático (en su mayoría ayudado por este tutorial de Ray Wenderlich ).

La vista tiene las siguientes celdas con alturas variables:

  • Sección 0
    • Fila 0: Imagen del encabezado
    • Fila 1: Información de la compañía
    • Fila 2: botones
  • Sección X> 0
    • Fila 0: Acerca de la tarjeta

La 'Acerca de la tarjeta' puede o no tener una image de encabezado y se puede expandir para mostrar el text completo.

Actualmente tengo cuatro problemas con esto:

  1. UITableViewController se empuja con animating: true . Sin embargo, tableView comienza detrás de la barra de navigation y salta cuando termina de animar. No se sabe por qué.

Actualización Esto no parece suceder de manera coherente. Alegría.

TableView salta después de la animación push

  1. Al hacer una acción que debe volver a cargar los botones para indicar el cambio de estado, vuelve a cargar la celda del button muy bien. Sin embargo, también hace que la celda de información de la empresa salte y se anime hacia arriba.

La actualización de la celda pasa con el siguiente código:

 func organizationRequestsUpdated() { self.tableView.reloadSections(NSIndexSet(index: 0), withRowAnimation: UITableViewRowAnimation.None) } 

Volver a cargar una celda hace que otra celda se anime

  1. Al tocar una tarjeta Acerca de la debe expandir. Actualmente estoy logrando esto al configurar label.numberOfLines = 5 en la iniciación de la celda y usar esto para alternar las tarjetas expand:

     @IBAction func tapped(sender: UITapGestureRecognizer) { if let view = sender.view?.superview as? OrganizationDetailAboutCardCell { tableView.beginUpdates() view.toggleReadMore() tableView.endUpdates() } } func toggleReadMore() { let expanded = aboutTextLabel.numberOfLines == 5 aboutTextLabel.numberOfLines = expanded ? 5 : 0 } 

Cambiar las variables que deberían activar el cambio de altura hace que todo salte

Estoy bastante seguro de que todos estos problemas tienen que ver con el tamaño automático de las celdas con las restricciones. Sin embargo, actualmente estoy en una pérdida sobre cómo solucionarlo. ¿Alguien ha hecho el tamaño automático de las celdas con restricciones y ha actualizado las alturas de las celdas sin que todos los tableView hagan saltos extraños?

  1. Al volver al UITableViewController, la mayoría de las celdas tienen las alturas equivocadas. No se sabe por qué.

introduzca la descripción de la imagen aquí

Cosas que he intentado

Problema 2

Para el problema número 2, ya he intentado actualizar recargando solo la celda del button;

 self.tableView.reloadRowsAtIndexPaths([NSIndexPath(forRow: 2, inSection: 0)], withRowAnimation: UITableViewRowAnimation.None) 

Sin embargo, esto provocó que todas las celdas de la sección se recalculen incorrectamente, terminando con un montón de celdas demasiado pequeñas. También probé este UITableViewRowAnimation.Fade sin embargo, esto tuvo el mismo resultado.

¿Ha especificado una altura de fila estimada? Encontré que esto es la fuente de muchos de mis problemas de layout cuando hice esto.

Otro posible problema es que debe asignar fonts a las tags para que se diseñen correctamente. Por lo tanto, en los methods cellForRowAtIndexPath, especifique la fuente que se debe usar en todas las tags / campos de text / vistas de text.

Aquí hay un proyecto de ejemplo aquí: https://github.com/sgoodwin/SelfSizingCells .

¡Buena suerte!