2009-03-25 15 views
19

Estoy construyendo un pequeño y diminuto cliente de Twitter en el iPhone. Naturalmente, estoy mostrando los tweets en una UITableView, y por supuesto son de diferentes longitudes. Estoy cambiando dinámicamente la altura de la celda basándose en el texto bastante bien:UITableView con alturas de celda dinámicas: ¿qué debo hacer para corregir el desplazamiento hacia abajo?

- (CGFloat)heightForTweetCellWithString:(NSString *)text { 
    CGFloat height = Buffer + [text sizeWithFont:Font constrainedToSize:Size lineBreakMode:LineBreakMode].height; 
    return MAX(height, MinHeight); 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSString *text = // get tweet text for this indexpath 
    return [self heightForTweetCellWithString:text]; 
    } 
} 

estoy mostrando la célula pío real utilizando el algoritmo en el libro PragProg:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *CellIdentifier = @"TweetCell"; 
    TweetCell *cell = (TweetCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
    cell = [self createNewTweetCellFromNib]; 
    } 
    cell.tweet.text = // tweet text 
    // set other labels, etc 
    return cell; 
} 

Cuando pateo arriba, todos los tweets visibles se muestran bien. Sin embargo, cuando me desplazo hacia abajo, los tweets de abajo están bastante desordenados: parece que una vez que una celda se ha desplazado de la pantalla, la altura de la celda de la que está arriba se cambia de tamaño para ser más grande de lo que debería ser, y oscurece parte de la celda debajo de ella. Cuando la celda llega a la parte superior de la vista, se reinicia y se renderiza correctamente. Desplazarse hacia arriba no presenta dificultades.

Aquí hay un video que muestra esto en acción: http://screencast.com/t/rqwD9tpdltd

he intentado un poco ya: cambiar el tamaño del marco de la célula en la creación, el uso de diferentes identificadores para las células con diferentes alturas (es decir [NSString stringWithFormat:@"Identifier%d", rowHeight]), propiedades cambiantes en Interface Builder ...

Si hay fragmentos de código adicionales que puedo publicar, háganmelo saber. ¡Gracias de antemano por tu ayuda!

+0

¿Cuáles son los valores de "tamaño" y "fuente" en su ejemplo? Tengo curiosidad por ver un poco más de código. – Moshe

Respuesta

8

suspiro. Resulta que no modifiqué todas las propiedades lo suficientemente bien. Pero al menos me libero de ese error. :)

Este comportamiento fue solucionado al verificar la propiedad "Clip Subviews" del UITableViewCell.

El comportamiento se produjo al declarar que mi etiqueta de texto de tweet era de la altura máxima necesaria: cuando las subvistas de la celda de la tabla no se recortaban, la etiqueta en la celda anterior representaría un sobrerretorno de la celda siguiente. Esto no era visible en la primera representación de la pantalla debido al orden en que el SDK representa las celdas, hacia abajo, y cómo se apila cada una encima de la otra.

Cuestiones relacionadas