Pobre UITableView Scrolling Performance issue iOS 7

Tengo una UITableView que contiene más de 20 filas, cada UITableViewCell contiene una UITextView que puedo configurar diferentes UIFont, alignment y color. Cuando me desploop hacia abajo o hacia arriba hay un entrecortado o retraso durante el desplazamiento, cuando elimino los colors de fuente y text y la alignment, todo se vuelve perfecto. ¿Apple cambió la forma de volver a dibujar text en iOS 7? Esto no sucedió con las versiones anteriores de iOS.

los instrumentos muestran que el time consumido en dequeueReusableCellWithIdentifier:forIndexPath:

– ACTUALIZAR Agregar código

 if (unit.fontName != nil ) { textView.font = [UIFont fontWithName:unit.fontName size:unit.fontSize.floatValue]; } if (unit.fontColor) { textView.textColor=[self convertString:unit.fontColor]; } else { textView.textColor=[UIColor colorWithRed:0 green:0 blue:0 alpha:1]; } if ([unit.fontSize floatValue] !=0) { textView.font = [UIFont fontWithName:textView.font.fontName size:[unit.fontSize floatValue]]; } if (unit.textAlignment) { switch ([summaryUnit.textAlignment intValue]) { case 0: textView.textAlignment = NSTextAlignmentLeft; break; case 1: textView.textAlignment = NSTextAlignmentCenter; break; case 2: textView.textAlignment = NSTextAlignmentRight; break; default: break; } } 

Hay muchas cosas detrás de escena en un UITableView, que tal vez no lo hagan obvio por qué parece no responder.

Como ejemplo, no debe hacer toneladas de trabajo en tableView:heightForRowAtIndexPath: como UITableView debe solicitar la altura de cada fila en su set de datos, independientemente de si son evidentes en la pantalla o no. Lo hace para determinar el tamaño del contenido.

Puede que no sean sus datos o sus células los que causen el problema. Las celdas complejas con muchas subvistas pueden hacer que el compositor pierda velocidad. Especialmente si tienes cosas como la transparencia.

Por lo tanto, siempre pongo cuatro reglas básicas para mí cuando estoy implementando una UITableView.

1) Siempre sepa lo que necesita para contar la vista de tabla cuando vuelva a cargar los datos. No hagas mucho de cosas en la fuente de datos o delega methods. Prepárese para cuando UITableView lo necesite.

2) No destruya ni cree vistas en el ciclo de desplazamiento. Por eso, no debe crear una nueva UIView (o lo que sea), como un ejemplo en sus methods prepareForReuse . Simplemente restablezca el contenido de las vistas y los controles existentes, y luego vuelva a configurarlos cada vez que UITableView lo solicite.

3) No tiene jerarquías de vista complejas en sus celdas. Especialmente, la transparencia y el contenido fuera de límites que se deben representar, pueden ser engorrosos para que el compositor procese a velocidades lo suficientemente rápidas.

4) No configure sus celdas en tableView:cellForRowAtIndexPath: Simplemente dequeue y devuelva la celda necesaria. Configure y configure siempre sus celdas en el tableView:willDisplayCell:forRowAtIndexPath: delegate method.

Dicho eso, hay algunos trucos que pueden ayudarte. Como mencioné anteriormente, no cree ni destruya vistas ni controles en el método prepareForReuse la celda. No hagas trabajo pesado en absoluto. Simplemente restablezca sus vistas y continúe. Lo cual podría sonar como si estuvieras haciendo, ya que es el dequeueReusableCellWithIdentifier:forIndexPath: eso provoca tus problemas.

Por último, si se debe a la composition (los instrumentos mostrarían el trabajo en algunos methods relacionados con Quartz), podrías tener éxito al usar la shouldRasterize y rasterizationScale de shouldRasterize de tu celda. Esto a veces puede acelerar la prestación de células de forma considerable.

Avísame si alguna de estas cosas tiene sentido, y si pudiera haber resuelto tu problema.

EDITAR:

PD. Sí. Apple cambió la representación de text en iOS 7. Pero, ¿por qué estás utilizando UITextView? No lo sé muy bien, pero sé que es mucho más pesado que UITextField o UILabel. Tal vez podría considerar usarlos en su lugar. UITextView generalmente es para editar algo que se parece a documentos (como la aplicación de Notes). Realmente creo que esto podría ser lo que está causando tus problemas.