objective-c uitableview

objective c - No quiero animación en las actualizaciones de inicio, bloque de actualizaciones finales para uitableview?



objective-c (5)

Tengo un UITableView que está utilizando una celda de tabla personalizada y cada celda tiene un UIWebView.

Debido a que UIWebView tomó tiempo para cargar, quiero evitar recargarlos a toda costa. En algunas situaciones, tengo todas las celdas cargadas, pero sus alturas están en mal estado. Por lo tanto, necesito "retransmitir" la tabla sin activar la función "cellForRow".

  1. Definitivamente no puedo usar reloadData ... ya que volverá a cargar las celdas.
  2. Intenté tableView.setNeedDisplay, setNeedsLayout, etc., ninguno de ellos puede reorganizar las celdas de la tabla
  3. La única forma en que funcionó, es llamar al bloque beginupdates / endupdates, ¡este bloque puede retransmitir mi tabla sin activar cellForRow! PERO, ¡no quería la animación! Este bloque produce un efecto de animación pero no lo quiero ...

¿Cómo puedo resolver mi problema?


Prefiero tener una transición sin problemas:

CGPoint offset = self.tableView.contentOffset; [UIView transitionWithView:self.tableView duration:0.5 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{ [self.tableView reloadData]; self.tableView.contentOffset = offset; } completion:nil];

darle una oportunidad.


Quería actualizar la altura de la celda para la sección 5 y el siguiente código funcionó para mí:

UiView.setAnimationsEnabled(False) self.productTableView.reloadSections(NSIndexSet(index: SectionType.ProductDescription.hashValue), withRowAnimation: UITableViewRowAnimation.None) self.productTableView.scrollToRowAtIndexPath(NSIndexPath(forRow: 0, inSection: 5), atScrollPosition: UITableViewScrollPosition.Bottom, animated: false) UIView.setAnimationsEnabled(true)


Una forma más de hacerlo usando bloques

Obj-C

[UIView performWithoutAnimation:^{ [self.tableView beginUpdates]; [self.tableView endUpdates]; }];

Rápido

UIView.performWithoutAnimation { tableView.beginUpdates() tableView.endUpdates() }


Swifties Tuve que hacer lo siguiente para que esto funcione:

// Sadly, this is not as simple as calling: // UIView.setAnimationsEnabled(false) // self.tableView.beginUpdates() // self.tableView.endUpdates() // UIView.setAnimationsEnabled(true) // We need to disable the animations. UIView.setAnimationsEnabled(false) CATransaction.begin() // And we also need to set the completion block, CATransaction.setCompletionBlock { () -> Void in // of the animation. UIView.setAnimationsEnabled(true) } // Call the stuff we need to. self.tableView.beginUpdates() self.tableView.endUpdates() // Commit the animation. CATransaction.commit()


[UIView setAnimationsEnabled:NO]; [tableView beginUpdates]; [tableView endUpdates]; [UIView setAnimationsEnabled:YES];