2010-04-24 15 views
7

Encontré este post en Bezaled UITableViewCells de http://news.selectstartstudios.com/beveled-uitableviewcells/. Estoy usando la técnica para reducir el ancho de las celdas, y en su mayor parte funciona de maravilla.Intentando forzar el redibujado de UITableViewCell

Sin embargo, tengo un pequeño problema. A veces las células no se vuelven a dibujar correctamente. Por ejemplo, aunque se supone que una celda es una celda "intermedia", se dibuja como una celda "superior": yfrog.com/f1screenshot20100424at100

¿Cómo puedo solucionar esto?

He intentado forzar a la celda a volver a dibujar a través de [conjunto de célulasNeedsDisplay], [cell setNeedsLayout], [tableView reloadRowAtIndexPath: withAnimation:], [cell drawrect:], y [tableView drawRect: atIndexPath]. Se me acabaron las ideas.

¡Gracias nuevamente!

Respuesta

23

Resulta que necesitaba llamar a [cell.backgroundView setNeedsDisplay] al final de cellForRowAtIndexpath.

+8

Bueno, ahora podría aceptar su propia respuesta. – Klaas

+2

No funciona para mí en iOS 7 ... –

+0

Trabajando para mí en iOS 9 –

1

Se metió en el mismo problema porque algunos de mis cellForRowAtIndexpath estaban en un hilo de fondo. La solución en este caso es forzar cualquier actualización directa de subvista de celda en el hilo principal:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ 
    if (cell.tag == indexPath.row){ 
     // data retrieval that may block main thread and cause temp freeze... 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      // update any cell subviews here 
     } 
    } 
}); 
Cuestiones relacionadas