tutorial example efecto custom apple ios swift uitableview ios11

example - iOS 11 UITableView eliminar filas error de animación



uitableview swift4 (4)

video del error de animación tableview

Tengo una vista de tabla que expande / contrae sus celdas.

A partir de iOS 11, el tableView comienza a comportarse de forma extraña al insertar y eliminar filas. El contentSize ha cambiado antes de que ocurra el bloque de animación y, por lo tanto, en el video, puedes ver un desplazamiento de buggy que ocurre en las celdas colapsadas. La animación se ve mal.

Este código funcionó perfectamente en iOS 10. ¿Alguien sabe qué ha cambiado en el lado de Apple? ¿Es este un problema conocido?

public func insertingRowsForAccordion(_ indexArray: [IndexPath], selectedRowIndex: Int) { beginUpdates() insertRows(at: indexArray, with: UITableViewRowAnimation.fade) endUpdates() // Scroll to selection after expanding children scrollToRow(at: IndexPath(row: selectedRowIndex, section: 0), at: UITableViewScrollPosition.top, animated: true) } public func removeRowsForAccordion(_ indexArray: [IndexPath]) { beginUpdates() deleteRows(at: indexArray, with: UITableViewRowAnimation.fade) endUpdates() }


En iOS 11.2, tuve una mala animación después de eliminar una fila usando las acciones de fila estándar. Solo pude mejorar la situación envolviendo la eliminación de la fila y el despido de la acción de la fila en una transacción CAT.

Primero descarto las acciones de la fila y espero que la animación se complete antes de eliminar la fila de la vista de tabla.

Al menos ya no salta alrededor de las vistas de tabla, el desplazamiento de contenido ya, pero es una larga animación de dos pasos. Todavía estoy buscando una mejor solución.

CATransaction.begin() CATransaction.setCompletionBlock({ self.tableView.beginUpdates() self.myViewModel?.items?.remove(at: indexPath.row) self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.top) self.tableView.endUpdates() }) self.tableView.setEditing(false, animated: true) CATransaction.commit()


He estado teniendo innumerables problemas con iOS 11 UITableView . Ir a cada UITableView en mi aplicación completa y hacer lo siguiente solucionó todos mis problemas.

Establezca el estimatedRowHeight estimatedSectionHeaderHeight estimatedRowHeight , estimatedSectionHeaderHeight , estimatedSectionFooterHeight en 0.

Fuente: iOS 11 Floating TableView Header


Lo arreglé utilizando este código:

self.tableView.beginUpdates() // ... self.tableView.endUpdates() self.tableView.layer.removeAllAnimations()


Tuve un problema similar con la animación de eliminación de filas de tablas en iOS 11 a veces desplazando las celdas de la tabla de forma extraña (iOS 10 funcionaba bien). Lo que ayudó fue implementar este método de delegado devolviendo la altura de la fila:

- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

Después de eso, tanto iOS 10 como 11 funcionan bien.