2008-11-07 7 views
9

Ich habe eine UITableView-Zelle, die abhängig von ihrem Inhalt eine variable Größe haben wird (möglicherweise mehrere Zeilen Text).Gibt es eine bessere Möglichkeit, die richtige Größe für eine UITableViewCell zu bestimmen?

, da es scheint, dass heightForRowAtIndexPath aufgerufen wird, bevor ich die Zelle Layout, ich denke, gerade die richtige Höhe durch den Aufruf [NSString sizeWithFont] auf meiner Textzeichenfolge. Gibt es eine bessere Möglichkeit, die Höhe nach zu setzen Ich habe den Text in der Zelle ausgelegt und habe eine Idee von genau, welche Größe es sein sollte?

Antwort

8

Es wird dumm klingen, aber ... äh ... „Ihre Zellen-Layout, bevor Sie heightForRowAtIndexPath verlassen“;)

Im Ernst, obwohl - das Betriebssystem immer nur nennt dies, wenn es geht um gebraucht werden (wie in: es ist im Begriff, die Zelle & Anzeige es auf dem Bildschirm zu erstellen), so dass es & Vorbereitung zur Anzeige bereit ist nicht verschwendete Anstrengung.

Hinweis, Sie tun nicht haben Sie Ihr Layout getrennt, logisch zu tun. Rufen Sie einfach Ihren [self prepLayoutForCellAtIndex: index] innerhalb Ihrer heightForRowAtIndexPath-Routine auf.

Wenn die Daten statisch sind, können Sie eine Höhentabelle erstellen und die Informationen zwischenspeichern.

if (0 == heightTable[index]) { 
    heightTable[index] = [self prepLayoutForCellAtIndex:index]; 
} 
return (heightTable[index]); 

Heck, auch wenn sich die Daten ändern, können Sie entweder den Tabellenwert in dem Verfahren neu berechnen können, die die Daten, oder klar zu 0 ändert, so wird es das nächste Mal gebraucht wird neu berechnet.

4

verwende ich die folgende, in der Regel:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath: (NSIndexPath *) indexPath { 
UITableViewCell *cell = [self tableView: tableView cellForRowAtIndexPath: indexPath]; 
return cell.bounds.size.height; 

}

Bitte beachte, dass ich diese verwenden für Tabellen, in denen ich Pre-Cache ein paar Zeilen vor der Zeit, nicht für diejenigen mit viel Zellen. Für Dinge wie Einstellungstabellen, in denen es nur ein paar Zeilen gibt, aber höchstwahrscheinlich sehr unterschiedlich, funktioniert es gut. Für größere Tische mache ich etwas, was Olie vorgeschlagen hat.

0

Wenn Sie sich SMS.app als Beispiel ansehen, speichert Apple die Zeilenhöhe der Zelle in der SMS.app sqlite-Datenbank.