Error de animation UITableViewCell en `moveRowAtIndexPath: toIndexPath:` mientras usa `estimatedRowHeight` y` UITableViewAutomaticDimension`

Cuando se usa moveRowAtIndexPath:toIndexPath: para mover una UITableViewCell , estoy viendo una falla de animation cuando se utiliza estimatedRowHeight y UITableViewAutomaticDimension cuando la celda se anima desde un estado visible a un estado no visible.

El problema desaparece si establecí explícitamente la altura de celdas mediante la implementación de tableView:heightForRowAtIndexPath: El problema solo aparece cuando las routes de índice de origen y destino son visibles y no visibles, respectivamente. Cuando la celda se mueve a otra ruta de índice visible, la animation se comporta como se esperaba.

He creado un proyecto de ejemplo para ilustrar el efecto: https://github.com/timarnold/Table-Cell-Sizing-Bug

http://www.openradar.me/19156703

Editar

@rdelmar señaló que mi pregunta en realidad no hace una pregunta.

¿Alguien sabe de una manera de solucionar este error y corregir este comportamiento? ¿O estoy haciendo algo mal?

Editar 2014-12-08

Utilicé uno de los tickets de soporte para desarrolladores proporcionados por Apple para preguntar sobre este problema con Apple. Confirmaron que era un error (visite http://www.openradar.me/19156703 para engañar) y no proporcionó ninguna solución.

Intente almacenar en memory caching las celdas.

 private var cellHeights = [NSIndexPath: CGFloat]() override func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { if let cachedHeight = cellHeights[indexPath] { return cachedHeight } else { return 60 } } override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { cellHeights[indexPath] = cell.frame.height } 

Tim,

Esta no es una respuesta definitiva, sino algunos hallazgos interesantes. En lugar de un error, creo que el comportamiento que está experimentando está relacionado con la forma en que iOS dibuja la celda en la pantalla del dispositivo. Más específicamente, a las celdas que están fuera de la pantalla. Dado que la fuente de datos no se ve afectada por las células que reorderan iOS pierden el rastro de la position de la celda.

Para TableViewController.m mi punto, he realizado las siguientes modificaciones a TableViewController.m :

En didSelectRowAtIndexPath

 [tableView moveRowAtIndexPath:indexPath toIndexPath:[NSIndexPath indexPathForRow:indexPath.row-3 inSection:indexPath.section]]; 

En cellForRowAtIndexPath

 cell.textLabel.text = [NSString stringWithFormat:@"%ld", indexPath.row + 1]; 

Verá que las células se comportan mal solo cuando se mueven a una position fuera de la vista de pantalla. Además, las celdas se vuelven a dibujar cada vez que mueve la pantalla.