Wie erstelle ich eine mehrzeilige Tabellenzelle in iOS?

8

Wie kann ich die zweite Zelle erweitern, damit sie in den Text passt, anstatt den Text zu skalieren? Gibt es eine eingebaute Möglichkeit, dies in iOS zu tun, oder muss ich mir eine selbstgemachte Lösung einfallen lassen? Wenn Sie in der iOS-Anwendung "Kontakte" nachsehen, gibt es eine ähnliche Box für Adresse. Ich kann das jedoch nicht finden.

Für alle, die dies in Zukunft erreichen möchten, hier ist der Code für meine Lösung:

HEADER-Datei:

%Vor%

UMSETZUNGS-Datei:

%Vor%

Hier ist ein Screenshot des Ergebnisses:

    
conorgriffin 09.02.2011, 23:16
quelle

4 Antworten

5

Leider müssen Sie dieses Feature selbst implementieren. Es gibt eine Vielzahl von Methoden und Callbacks, die Sie verwenden müssen, um die Höhe der Zeilen und Beschriftungen zu berechnen. Wenn Sie Hilfe beim ersten Start benötigen, kann ich diese Antwort ändern, um Beispielcode hinzuzufügen. Sonst bin ich mir sicher, dass es hier einige Fragen zu SO oder Google gibt, mit denen Sie beginnen können. Zusammenfassend jedoch:

  • Bestimmen Sie die Höhe der Zeile in der UITableViewDelegate Methode -tableView:heightForRowAtIndexPath: . Sie müssen wahrscheinlich die NSString UIKit Addition-Methoden um zu berechnen, wie groß Ihre Zeichenkette bei einer gegebenen Schriftgröße ist, usw. Geben Sie die richtige Höhe von dieser Delegiertenmethode zurück.
  • Stellen Sie sicher, dass Ihr Label (entweder in IB oder programmatisch konfiguriert) auf mehrere Zeilen eingestellt ist. Wenn Sie numberOfLines auf 0 setzen, verwendet das Label so viele Zeilen wie nötig.
  • In Ihrer UITableViewDataSource -Implementierung von -tableView:cellForRowAtIndexPath: müssen Sie die gleiche Logik wie zuvor verwenden, um den Rahmen Ihrer Beschriftungen zu bestimmen. Legen Sie den gewünschten Text fest und ändern Sie den Rahmen so, dass die Beschriftung groß genug ist, um den gesamten Text nicht zu überdecken.
LucasTizma 09.02.2011, 23:59
quelle
1

Wo Sie die Adresse als detailTextLabel haben, verwenden Sie ein UILabel, das so viele Zeilen unterstützt, wie Sie benötigen, für eine Adresse sollte 3 ausreichen. Zusammen mit Paul Bently's antwort, du solltest gut sein.

    
WrightsCS 09.02.2011 23:53
quelle
1

Implementieren:

%Vor%

in Ihrem Tabellendelegierten. Für die verschiedenen Zeilen und Abschnitte im übergebenen IndexPath geben Sie eine andere Höhe zurück, die zu Ihrem Label passt.

Stellen Sie sicher, dass 'adjust to fit' für das Label in IB nicht angekreuzt ist (Eigenschaft adjustsFontSizeToFitWidth , wenn Sie mit Code arbeiten).

    
Paul Bentley 09.02.2011 23:44
quelle
0

Ich bin gerade auf dasselbe Problem gestoßen. Ich habe eine alternative Lösung gefunden, die nicht so viel Hardcoding erfordert, und ermöglicht es Ihnen, Änderungen am Label im Interface Builder vorzunehmen, die sich in der Höhenberechnung widerspiegeln.

%Vor%

Der einzige Nachteil ist, dass dies einige zusätzliche temporäre UITableViewCell-Zuweisungen verursacht, aber die Tabellenansicht wird sie sofort zurückfordern, also denke ich nicht, dass es ein großes Problem sein sollte.

    
Chris Vasselli 20.11.2012 06:34
quelle

Tags und Links