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!
¿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