iOS UITableView reloadRowsAtIndexPaths

Tengo un UITableview que perezoso carga imágenes de diferentes tamaños. Cuando se carga una image, necesito actualizar la celda específica, así que descubrí que necesito usar reloadRowsAtIndexPaths. Pero cuando uso este método, todavía llama al método heightForRowAtIndexPath para cada celda. Pensé que todo el propósito de reloadRowsAtIndexPaths es que solo llamará a heightForRowAtIndexPath para la fila específica que especifique?

¿Alguna idea de por qué?

[self.messageTableView beginUpdates]; [self.messageTableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:count inSection:0]] withRowAnimation:UITableViewRowAnimationNone]; [self.messageTableView endUpdates]; 

Gracias

endUpdates desencadena un recálculo del tamaño del contenido, que requiere heightForRowAtIndexPath . Así es como funciona.

Si se trata de un problema, puede extraer su lógica de configuration de celdas fuera de cellForRowAtIndexPath y reconfigurar la celda directamente sin pasar por reloadRowsAtIndexPaths . Aquí hay un resumen básico de cómo podría verse esto:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *cellId = ...; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId]; } [self tableView:tableView configureCell:cell atIndexPath:indexPath]; return cell; } - (void)tableView:(UITableView *)tableView configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { //cell configuration logic here } 

Entonces, dondequiera que esté llamando actualmente a reloadRowsAtIndexPaths , lo hará en su lugar y no se llamará a heightForRowAtIndexPath :

 UITableViewCell *cell = [self.messageTableView cellForRowAtIndexPath:indexPath]; [self tableView:self.messageTableView configureCell:cell atIndexPath:indexPath];