iOS8 tableviewcell altura cambiando cuando se gira el dispositivo en Swift

Estoy intentando usar el nuevo tamaño automático para mi tableview. Estoy haciendo esto:

tableView.rowHeight = UITableViewAutomaticDimension 

Tengo un multiline-uilabel en mi UITableViewCell con algunas limitaciones que funcionan espléndidamente; ¡la altura de las filas es dinámica cuando ingrese la vista de tabla tanto en paisaje como en retrato! ¡Increíble!

… pero cuando giro el dispositivo, las filas obtienen la altura básica (es decir, 44).

Agregué esta fila:

 override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { self.tableView.reloadData() } 

Y el problema se desvanece. ¿Pero debería ser esto realmente necesario? ¿Debe haber una mejor manera de arreglar esto?


Editar:

Acabo de descubrir que el mismo problema ocurre cuando elimino una fila en la vista de tabla así:

 tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) 

¿Me estoy perdiendo de algo? ¿Por qué no es esto funcionar fuera de la caja?


Edite nuevamente:

Ahora estoy haciendo así:

 self.tableView.estimatedRowHeight = 44 tableView.rowHeight = UITableViewAutomaticDimension 

Luego, cuando mis datos se obtienen de API:

 self.tableView.reloadData() self.tableView.beginUpdates() self.tableView.endUpdates() 

Esto parece cubrir todos los casos que he probado hasta ahora, pero parece realmente hacky! Sin las actualizaciones begin / end, las celdas muestran algunas alturas realmente cobardes en la primera carga. (Pero al girar el dispositivo, las celdas ajustan sus alturas correctamente).

Todo esto parece tan complicado. No he encontrado una sola guía que cubra estos casos correctamente.

Tuve un problema similar con la rotation en la que toda la barra de búsqueda y la tablaView se desplazaron hacia abajo al girar muy de retrato a paisaje y viceversa. Ver-> Swift searchBar se separa de la parte superior de tableView después de searchController.active durante la rotation:

Swift searchBar se separa de la parte superior de tableView después de searchController.active durante la rotation

Pegué su function de anulación, es decir:

 override func willAnimateRotationToInterfaceOrientation(toInterfaceOrientation: UIInterfaceOrientation, duration: NSTimeInterval) { self.tableView.reloadData() } 

después de la function viewDidLoad y mi problema desapareció. No sé por qué. Glenn Tisman

De acuerdo con la session de la WWDC de este año, si la célula ya usa Autolayout, entonces se supone que cambia automáticamente de tamaño para usted. Haría esto intentando llamar a systemLayoutSizeFittingSize:(CGSize) , o si no ha utilizado la function de reproducción automática, intentaría llamar a sizeThatFits:(CGSize)

Una cosa para asegurarse de si también está soportando iOS7 es que la configuration de tableView.rowHeight y tableView.estimatedRowHeight causará un comportamiento extraño y querrá condicionalmente llamar a uno u otro, pero no a ambos, dependiendo de qué versión de iOS, la aplicación se está ejecutando.

Si tiene problemas con la label en particular, también puede comprobar que está utilizando el nuevo atributo "Ancho de layout máximo preferido automático" para la UILabel (si está en un guión gráfico, esto se encuentra bajo los "Atributos" inspector) y que las lines están configuradas en '0'. Consulte la documentation para get más detalles. Véase también "Comportamiento de las tags" en el Catálogo de interfaces de iOS para ver algunas advertencias sobre cómo mezclar ciertos comportamientos de UILabel y get resultados extraños.

Finalmente, puede ver lo que está sucediendo en los methods de rotation recientemente agregados para las classs de tamaño :

-willTransitionToSize:withTransitionCoordinator: -willTransitionToTraitCollection:withTransitionCoordinator: