2013-02-12 23 views
10

Ich entwickle derzeit auf einer App, die einige Tweets in einer Tabellenansicht anzeigt. Auf dem Storyboard habe ich eine Prototyp-Zelle erstellt, die das grundlegende GUI-Konzept eines Tweeteintrags enthält.iOS berechnen Höhe in der Tabelle Zelle anzeigen

Es sieht circa wie folgt aus:

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

Jetzt bin ich mit dem folgenden Code, um die Höhe der Zelle zu berechnen, aber irgendwie versagt es.

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

Übrigens gibt es etwas anderes, was seltsam ist. Wenn ich die Tabellenansicht scrolle, scheint die ganze App zu frieren. Ist das normal oder mache ich etwas falsch?

+0

Es ist nicht normal @ Einfrieren. Von außen habe ich das Gefühl, das könnte an einem der beiden Gründe liegen: 1) Sie machen zu viele Berechnungen, aufgrund derer es dazu führt. 2) Um Text in einer formatierten Weise anzuzeigen, verwenden Sie möglicherweise eine Art Codierung für jeden Text der Zeile. –

+0

Hallo, danke für deinen Kommentar. Du hast recht. Ich habe [tableView reloadData] jede Sekunde aufgerufen, um den Sekundenzähler zu aktualisieren. Ich entfernte den Schalter und das Einfrieren hörte auf. Ich versuche das in der Zellansicht zu tun. :) –

+0

Das ist cool. :) –

Antwort

13

Versuchen Sie dies für Ihre Frage:

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

Hoffe, es hilft.

+0

'sizeWithFont' und' UILineBreakModeWordWrap' ist veraltet – aykutt

Verwandte Themen