2009-03-25 23 views
19

Sto costruendo un piccolo e minuscolo client Twitter su iPhone. Ovviamente, sto visualizzando i tweet in un UITableView, e sono ovviamente di lunghezza variabile. Sto dinamicamente modificare l'altezza della cella in base al testo abbastanza bene:UITableView con altezze dinamiche delle celle: cosa devo fare per correggere lo scorrimento verso il basso?

- (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]; 
    } 
} 

sto mostrando la cellula Tweet reale utilizzando l'algoritmo nel 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; 
} 

Quando caric in alto, tutti i tweet visibili vengono visualizzati correttamente. Tuttavia, quando si scorre verso il basso, i tweet qui sotto sono piuttosto confusi - sembra che una volta che una cella è scesa dallo schermo, l'altezza della cella per quella sopra viene ridimensionata per essere più grande di quanto dovrebbe essere, e oscura una parte di la cella sottostante. Quando la cella raggiunge la parte superiore della vista, si reimposta e esegue correttamente il rendering. Scorrere verso l'alto non presenta difficoltà.

Ecco un video che mostra in azione: http://screencast.com/t/rqwD9tpdltd

ho provato un po 'già: ridimensionamento telaio della cella sulla creazione, utilizzando diversi identificatori per celle di diversa altezza (cioè [NSString stringWithFormat:@"Identifier%d", rowHeight]), modifica proprietà in Interface Builder ...

Se ci sono frammenti di codice aggiuntivi che posso postare, per favore fatemelo sapere. Grazie in anticipo per il vostro aiuto!

+0

Quali sono i valori per "dimensione" e "carattere" nell'esempio? Sono curioso di vedere un po 'più di codice. – Moshe

risposta

8

Sigh. Si scopre che non ho modificato tutte le proprietà abbastanza bene abbastanza. Ma almeno mi sono liberato di quell'errore. :)

Questo comportamento è stato risolto assicurandosi di controllare la proprietà "Clip Subviews" di UITableViewCell.

Il comportamento è stato causato dichiarando che l'etichetta del mio tweet ha l'altezza massima necessaria; quando le sottoview della cella della tabella non sono state troncate, l'etichetta nella cella sopra mostrerebbe il sovrimpressione della cella sottostante. Questo non era visibile al primo rendering dello schermo a causa dell'ordine in cui l'SDK rende le celle - in basso - e in che modo si impila ciascuna sopra l'altra.

Problemi correlati