Dies ist auf dem iPhone 0S 2.0. Die Antworten für 2.1 sind ebenfalls in Ordnung, obwohl mir keine Unterschiede in Bezug auf Tabellen bekannt sind.
Es scheint möglich zu sein, Text zum Umbrechen zu bringen, ohne eine benutzerdefinierte Zelle zu erstellen, da a standardmäßig eine UITableViewCell
enthält UILabel
. Ich weiß, dass ich es zum Laufen bringen kann, wenn ich eine benutzerdefinierte Zelle erstelle, aber das versuche ich nicht zu erreichen - ich möchte verstehen, warum mein aktueller Ansatz nicht funktioniert.
Ich habe herausgefunden, dass das Etikett bei Bedarf erstellt wird (da die Zelle den Zugriff auf Text und Bilder unterstützt und die Datenansicht erst bei Bedarf erstellt wird). Wenn ich also Folgendes mache:
cell.text = @""; // create the label
UILabel* label = (UILabel*)[[cell.contentView subviews] objectAtIndex:0];
dann bekomme ich eine gültige Beschriftung, aber die Einstellung numberOfLines
auf diese (und lineBreakMode) funktioniert nicht - ich bekomme immer noch einzeiligen Text. Es gibt viel Höhe in der, UILabel
damit der Text angezeigt wird - ich gebe nur einen großen Wert für die Höhe in zurück heightForRowAtIndexPath
.
quelle
Die Antwort von Tim Rupe für iOS7 wurde aktualisiert:
quelle
Ein kurzer Kommentar / eine kurze Antwort, um meine Erfahrungen aufzuzeichnen, als ich das gleiche Problem hatte. Trotz der Verwendung der Codebeispiele wurde die Zellenhöhe in der Tabellenansicht angepasst , aber die Beschriftung in der Zelle wurde immer noch nicht richtig angepasst. Die Lösung bestand darin, dass ich meine Zelle aus einer benutzerdefinierten NIB-Datei lud, was passiert, nachdem die Zellenhöhe angepasst wurde.
Und ich hatte meine Einstellungen in der NIB-Datei so, dass kein Text umbrochen wird und nur eine Zeile für das Etikett vorhanden ist. Die Einstellungen der NIB-Datei haben die Einstellungen überschrieben, die ich im Code angepasst habe.
Die Lektion, die ich nahm, bestand darin, immer zu berücksichtigen, wie der Zustand der Objekte zu jedem Zeitpunkt ist - sie wurden möglicherweise noch nicht erstellt! ... mit jemandem auf der ganzen Linie.
quelle
Wenn wir nur Text in die
UITableView
Zelle einfügen möchten, benötigen wir nur zwei Delegaten, mit denen wir arbeiten können (es ist nicht erforderlich, zusätzliche hinzuzufügenUILabels
).1)
cellForRowAtIndexPath
2)
heightForRowAtIndexPath
Diese Lösung hat bei mir funktioniert:
Hier ist der String
mutArr
ein veränderbares Array, von dem ich meine Daten erhalte.EDIT: - Hier ist das Array, das ich genommen habe.
quelle
Jetzt können die Tabellenansichten Zellen mit Selbstgröße haben. Richten Sie die Tabellenansicht wie folgt ein
tableView.estimatedRowHeight = 85.0 //use an appropriate estimate tableView.rowHeight = UITableViewAutomaticDimension
Apple Referenz
quelle
Ich benutze die folgenden Lösungen.
Die Daten werden separat in einem Mitglied bereitgestellt:
Die Handhabung kann problemlos in erfolgen
cellForRowAtIndexPath
. Definieren Sie die Zelle / definieren Sie die Schriftart und weisen Sie diese Werte dem Ergebnis "Zelle" zu. Beachten Sie, dass dernumberoflines
Wert auf "0" gesetzt ist, was bedeutet, dass Sie das nehmen, was benötigt wird.In
heightForRowAtIndexPath
berechne ich die Höhe des umbrochenen Textes. Die Größe des Bodes hängt von der Breite Ihrer Zelle ab. Für das iPad ist dies 1024. Für das iPhone und den iPod 320.quelle
Ich fand das ziemlich einfach und direkt.
für zB:
Dies mag der beste / Standardansatz sein oder auch nicht, aber es hat in meinem Fall funktioniert.
quelle
Probieren Sie meinen Code schnell aus. Dieser Code funktioniert auch für normale UILabels.
Rufen Sie jetzt einfach so an
quelle
Ich denke, das ist eine bessere und kürzere Lösung. Formatieren Sie einfach das
UILabel
(textLabel
) der Zelle, um die Höhe automatisch durch Angabe zu berechnen,sizeToFit
und alles sollte in Ordnung sein.quelle
Ich glaube nicht, dass Sie eine
UITableViewCell's
private Basis manipulieren könnenUILabel
, um dies zu tun. Sie könnenUILabel
der Zelle selbst eine neue hinzufügen undnumberOfLines
mit verwenden,sizeToFit
um die Größe entsprechend anzupassen. Etwas wie:quelle