2013-02-12 11 views
10

Attualmente sto sviluppando un'applicazione che mostra alcuni tweet in una tabella. Nello storyboard ho creato una cellula prototipo, che include il concetto base di una voce tweet.iOS calcola l'altezza del testo nella cella TableView

Si guarda intorno come questo:

++++++++++++++ 
++Username++++ 
++++++++++++++ 
++Tweet+++++++ 
++++++++++++++ 
++Time-Ago++++ 
++++++++++++++ 

ora sto calcolare l'altezza della cella con il seguente codice, ma in qualche modo viene a mancare.

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSDictionary * currentTweet = [tweetArray objectAtIndex: indexPath.row]; 
    NSString * tweetTextString = [currentTweet objectForKey: @"text"]; 
    CGSize textSize = [tweetTextString sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:CGSizeMake(630, 1000) lineBreakMode: NSLineBreakByWordWrapping]; 

    float heightToAdd = 24 + textSize.height + 15 + 45; 
    if(heightToAdd < 90) { 
     heightToAdd = 90; 
    } 

    return heightToAdd; 
} 

A proposito, c'è qualcos'altro, che è strano. Se scorro la vista tabella l'intera app sembra bloccarsi. È normale o sto facendo qualcosa di sbagliato?

+0

Non è normale @ congelamento. Dall'esterno, ho la sensazione, questo potrebbe essere dovuto a uno dei due motivi: 1) stai facendo troppi calcoli a causa dei quali sta portando a questo. 2) Per visualizzare il testo in modo formattato, apparentemente potresti usare un qualche tipo di codifica su ciascun testo della riga. –

+0

Ciao, grazie per il tuo commento. Hai ragione. Ho chiamato [tableView reloadData] ogni secondo per aggiornare il contatore dei secondi fa. Ho rimosso il contatore e il congelamento si è fermato. Sto provando a farlo all'interno della cellview. :) –

+0

È fantastico. :) –

risposta

13

Prova questo per il problema:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 

    NSDictionary * currentTweet = [tweetArray objectAtIndex: indexPath.row]; 

    NSString * tweetTextString = [currentTweet objectForKey: @"text"]; 

    CGSize textSize = [tweetTextString sizeWithFont:[UIFont systemFontOfSize:15.0f] constrainedToSize:CGSizeMake(240, 20000) lineBreakMode: UILineBreakModeWordWrap]; //Assuming your width is 240 

    float heightToAdd = MIN(textSize.height, 100.0f); //Some fix height is returned if height is small or change it to MAX(textSize.height, 150.0f); // whatever best fits for you 

    return heightToAdd; 
} 

Speranza che aiuta.

+0

'sizeWithFont' e' UILineBreakModeWordWrap' è deprecato – aykutt