Ich habe Zellen, die aus einem Titel, Datum und einer Anzahl von Hashtags bestehen.Dynamische Höhe UITableViewCell
Hier ist der Screenshot Storyboard:
ich folgendes in meinem ViewDidLoad festgelegt haben:
tableView.rowHeight = UITableViewAutomaticDimension
Aber haben nicht gegeben jede estimatedHeight für die Tableview, die ich erklären werde Warum.
Hier ist meine customCell:
@IBOutlet weak var title: UILabel!
@IBOutlet weak var date: UILabel!
@IBOutlet weak var hashtagsView: UIView!
var item: Item? {
didSet {
configureCell()
}
}
func configureCell() {
if item = item {
title.text = item!.title
date.text = item!.date
// The part where I calculate the sizes of hashtags to fit them in hashtagsView
let totalWidth = CGRectGetWidth(hashtagsView.frame)
print("TotalWidth: \(totalWidth)")
.
.
.
.
print("Content: \(self.contentView.frame)")
print("HashtagsView: \(self.hashtagsView.frame)")
}
}
Hier die Ergebnisse ist:
Mit tableView.estimatedHeight = 150
TotalWidth: 240.0
Content: (0.0, 0.0, 240.0, 119.666666666667)
HashtagsView: (0.0, 0.0, 240.0, 128.0)
Ohne estimatedHeight
TotalWidth: 240.0
Content: (0.0, 0.0, 414.0, 43.6666666666667)
HashtagsView: (0.0, 0.0, 240.0, 128.0)
Recap
Wenn es eine estimatedHeight, content Zelle nicht eine richtige Breite druckt, sondern zeigt den Inhalt der Zelle gut wie nichts falsch ist (mit Ausnahme der hashtagsView).
Wenn es keine geschätzte Höhe gibt, druckt die contentView der Zelle tatsächlich die richtige Breite, wodurch ich die Hashtags-Frames berechnen kann, aber die Zellen werden mit ihrer Standardgröße 44 angezeigt.
Detaillierte Info
Da ich weiß nicht, wie viele Hashtags da ist, ich versuche, die leere UIView zu verwenden, um die UIButtons programmatisch hinzuzufügen. Und zur Berechnung der Hashtags-Buttons muss ich die "width" der contentView der Zelle oder der hashtagsViews haben, aber wenn ich tableView.estimatedHeight setze, ist die Zellenbreite eine beliebige Zahl (zB 240 in 6s Plus Simulator) . Und ich kann die HashtagsView Breite nicht bekommen, obwohl ich keine Auto-Layout Probleme habe.
Und wenn ich eine Schätzung nicht geben tableView.estimatedHeight, erhalte ich folgendes:
Custom cells without estimatedHeight
aktualisiert - Ein Update gestellt von @EarlGray in den Kommentaren
Die Hashtags sind eigentlich UIButtons, die ich der HashtagsView dynamisch hinzufüge. Ich muss die Höhe des hashtagsView so strecken, dass es mehr als eine Zeile von Hashtags passt.
Ich denke, ich muss entweder UIView subclass und override layoutSubviews() überschreiben, um ein passendes vertikales Layout zu erreichen oder jeder Unteransicht (UIButtons) programmatisch Constraints hinzuzufügen.
tun, was @VinodVishwanath sagte, das Setzen von estimatedRowHeight mit expliziten Höhen kombiniert und vertikalen räumlichen Gegebenheiten gibt mir dies:
Welche unables mir die Breite des hashtagsView zu bekommen. Während die Berechnungen der UIButtons' Frames, muss ich die Breite des cell.contentView, aber irgendwie die estimatedRowHeight Einstellung gibt mir die folgenden Koordinaten für die cell.contentView.frame
Content: (0.0, 0.0, 240.0, 119.666666666667)
was es ist falsch, weil es hat Gib 414, und deshalb beginnen meine Hashtags von der Hälfte des Bildschirms.
Kommentar aus tableView.estimatedRowHeight gibt mir die richtigen Koordinaten:
Content: (0.0, 0.0, 414.0, 43.6666666666667)
Aber vermasselt meine Tableview etwa so:
Update # 2 - Hier ist meine Einschränkungen für die cell.contentView
Update # 3 - Ein Haltepunkt auf meinem configureCell Verfahren
HashtagsView's superview returns nil!!
ich verstehe es nicht, meine UIView IBOutlet angeschlossen ist, ich doppelt geprüft.
Alle contentViewviews haben falsche Frames. So auch die superview-less hashtagsView.
Aber wenn ich geschätztRowHeight entferne, betrachtet es plötzlich HashtagsView als Unteransicht der Zelle contentView. Mit Ausnahme von contentView geben Subviews-Frames immer noch falsche und negative Werte zurück.
Dieser Link kann Ihnen helfen, die Höhe der Zelle zu berechnen: http://Stackoverflow.com/a/36095091/3918500 –
Können Sie bitte Ihren Beitrag aktualisieren, um explizit zu bestätigen oder zu leugnen, ob Sie Live-Bearbeitung mit Multiline-Unterstützung unterstützen möchten ? Damit meine ich, wenn ich genug Hashtags gesetzt habe, werden sie zur nächsten Zeile überlaufen? –
@EarlGrey Ja, ich möchte das unterstützen. Aber ich glaube nicht, dass es Live-Bearbeitung ist oder ich dich nicht ganz verstanden habe. Weil ich nicht möchte, dass der Benutzer etwas bearbeitet. Ich möchte nur die Hashtags in die nächste Zeile fließen, ohne die Self-Sizing-Custom-Tabelle zu ruinieren – Mehrdadmaskull