2010-12-29 7 views
8

Estoy usando una UITableView en mi aplicación iOS, y he estado viendo un extraño problema recientemente.UITableView reloadRowsAtIndexPaths realizando la animación cuando no debería

Supongamos mi mesa está estructurado de la siguiente manera:

section 1 header 
row 
section 2 header 
section 3 header 
row 
row 
... 

(Tenga en cuenta que la sección 2 tiene ninguna fila)

Estoy realizando cambios a las filas de la tabla a través de mi

[self.tv beginUpdates]; 
    [self.tv reloadRowsAtIndexPaths:ip withRowAnimation:UITableViewRowAnimationNone]; 
    [self.tv endUpdates]; 

No quiero que se realicen animaciones. Solo quiero que la fila se actualice. El problema es que esta estrategia funciona para cada fila y sección en my table excepto sección 3, fila 1: la primera fila de la última sección. Cuando actualizo esta fila (que de hecho está utilizando los indexPaths correctos), en lugar de no obtener animación, la fila hace este pequeño salto, como si se deslizara en una nueva fila para reemplazar la antigua o algo así. La fila se desliza ligeramente hacia arriba, luego hacia abajo, como si estuviera insertando una fila. Supongo que tiene algo que ver con los cálculos de encabezado, pero devuelvo los valores correctos para heightForHeaderInSection.

¿Alguien ha visto este comportamiento?

+0

Estoy viendo esto también, en iOS5. ¿Encontraste una solución? – tarmes

+0

Nunca encontré una solución, no. – jimt

+0

Todavía tiene el mismo problema en iOS 7. ¿Encuentra alguna solución? –

Respuesta

0

Me pregunto si los beginUpdates y endUpdates son necesarios en este escenario de solo recarga.

+0

Lo he probado con y sin, produciendo el mismo resultado. – jimt

+0

¿Has intentado cambiar el parámetro conRowAnimation para comprobar que al menos anima la forma en que preguntas cuando lo haces? – VdesmedT

+0

Bueno, en realidad no anima la forma en que se lo digo. Siempre hace el pequeño salto independientemente de la animación que especifique. ¿Eso significa algo? – jimt

-1

Tuve el mismo problema. La solución fue a buscar a la celda de la tabla usando:

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath]

y actualice de forma manual utilizando un método de configuración personalizada o simplemente llamando a:

[cell setNeedsLayout]

Para obtener más información, véase :

UITableView reloadRowsAtIndexPaths graphical glitch

+0

Esta solución no funcionó para mí. En NSFetchedResultsChangeMove estoy tratando de actualizar la celda y también de llamar a moveRowAtIndexPath. – malhal

Cuestiones relacionadas