2013-02-12 7 views
10

Obecnie rozwijam się na aplikacji, która wyświetla niektóre tweety w tableview. Na scenorysie stworzyłem komórkę prototypową, która zawiera podstawową koncepcję gui wpisu tweet.iOS obliczyć wysokość tekstu w tableView komórki

Wygląda OKOŁO tak:

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

teraz jestem obliczania wysokości komórki z następującego kodu, ale jakoś się nie powiedzie.

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

Nawiasem mówiąc, jest coś innego, co jest dziwne. Jeśli przewinę widok tabeli, cała aplikacja wydaje się zamarzać. Czy to normalne, czy robię coś nie tak?

+0

To nie jest normalne @ zamrażanie. Z zewnątrz mam przeczucie, może to wynikać z jednego z dwóch powodów: 1) robisz zbyt wiele obliczeń, dzięki czemu do tego dochodzisz. 2) Aby wyświetlić tekst w sformatowany sposób, prawdopodobnie korzystasz z pewnego rodzaju kodowania na każdym wierszu tekstu. –

+0

Witam, dziękuję za komentarz. Masz rację. Zadzwoniłem [tableView reloadData] co sekundę, aby zaktualizować licznik sekund temu. Usunąłem kontuar i zamrożenie zatrzymało się. Próbuję to zrobić w widoku komórki. :) –

+0

To jest fajne. :) –

Odpowiedz

13

Spróbuj tego dla swojego problemu:

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

Nadzieję, że to pomaga.

+0

'sizeWithFont' i' UILineBreakModeWordWrap' jest przestarzałe – aykutt