Neu in iOS 8 können Sie 100% dynamische Tabellenansichtszellen erhalten, indem Sie einfach die geschätzte Zeilenhöhe festlegen und dann Ihre Elemente in der Zelle mithilfe des automatischen Layouts anordnen. Wenn der Inhalt an Höhe zunimmt, nimmt auch die Höhe der Zelle zu. Dies ist äußerst nützlich und ich frage mich, ob das gleiche Kunststück für Abschnittsüberschriften in einer Tabellenansicht erreicht werden kann.
Kann man beispielsweise ein UIView
In erstellen tableView:viewForHeaderInSection:
, eine UILabel
Unteransicht hinzufügen , Einschränkungen für das automatische Layout des Etiketts für die Ansicht festlegen und die Höhe der Ansicht erhöhen, um sie an den Inhalt des Etiketts anzupassen, ohne sie implementieren zu müssen tableView:heightForHeaderInSection:
?
Die Dokumentation für viewForHeaderInSection
Zustände: "Diese Methode funktioniert nur dann korrekt, wenn tableView: heightForHeaderInSection: ebenfalls implementiert ist." Ich habe nicht gehört, ob sich für iOS 8 etwas geändert hat.
Wenn man das nicht kann, wie kann man dieses Verhalten am besten nachahmen?
quelle
UITableViewAutomaticDimension
heißt es: "Wenn Sie diese Konstante intableView:heightForHeaderInSection:
oder zurückgebentableView:heightForFooterInSection:
,UITableView
wird eine Höhe verwendet, die dem vontableView:titleForHeaderInSection:
oder zurückgegebenen Wert entsprichttableView:titleForFooterInSection:
(wenn der Titel nicht lautetnil
)."estimatedSectionHeaderHeight
odertableView:estimatedHeightForHeaderInSection:
UNDsectionHeaderHeight
oder habentableView:heightForHeaderInSection:
. Wenn Sie die Delegatmethoden verwenden, müssen Sie außerdem einen Wert größer als 1,00 für die Schätzung zurückgeben (vollständig undokumentiertes Verhalten). Andernfalls wird der Delegat für die Höhe NICHT aufgerufen und die Standardhöhe der Tabellenansicht wird verwendet.Dies kann erreicht werden, indem
estimatedSectionHeaderHeight
Sie die Ansicht in Ihrer Tabelle festlegen (oder zurückgeben) .Wenn sich Ihre Abschnittsüberschrift nach dem Festlegen mit Ihren Zellen überlappt
estimatedSectionHeaderHeight
, stellen Sie sicher, dass Sie auch eine verwendenestimatedRowHeight
.(Ich füge diese Antwort hinzu, da der zweite Absatz eine Antwort auf ein Problem enthält, das nach dem Lesen aller Kommentare gefunden werden kann, die einige möglicherweise übersehen.)
quelle
estimatedRowHeight
funktioniert dies wie Charme :)Ich bin in der gleichen Ausgabe hängen geblieben, in der der Header bis zu einer Höhe von Null wurde und es sei denn, ich gebe im Delegaten eine feste Höhe für an
heighForHeaderInSection
.Versuchte viele Lösungen, einschließlich
Aber nichts hat funktioniert. Meine Zelle verwendete auch richtige Autolayouts. Zeilen änderten ihre Höhe dynamisch mithilfe des folgenden Codes, Abschnittsüberschriften jedoch nicht.
Das Update ist extrem einfach und auch seltsam, aber ich musste die Delegate-Methoden anstelle von 1 Zeilencode für das
estimatedSectionHeaderHeight
und implementieren,sectionHeaderHeight
was für meinen Fall wie folgt lautet.quelle
Swift 4+
arbeiten (100% getestet)
Wenn Sie sowohl einen Abschnitt als auch eine Zeile mit dynamischer Höhe basierend auf dem Inhalt benötigen, können Sie den folgenden Code verwenden:
Schreiben Sie auf viewDidLoad () folgende Zeilen:
Jetzt haben wir die Zeilenhöhe und die Abschnittshöhe mithilfe der UITableView Delegate-Methoden festgelegt:
quelle
Ich habe es versucht
Der Header mit mehrzeiliger Beschriftung wurde jedoch nicht richtig dimensioniert. Fügte dies hinzu, um mein Problem zu lösen:
quelle
tableView:estimatedHeightForHeaderInSection
undtableView:heightForHeaderInSection
anstatt sie bei viewDidLoad zu definieren.estimatedSectionHeaderHeight
ist nur unter iOS 11 erforderlichIn meinem Fall:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.Set im Storyboard funktioniert nicht .
Überschreiben
heightForHeaderInSection
funktioniert .Testumgebung:
quelle
Ja, das funktioniert bei mir. Ich muss weitere Änderungen wie folgt vornehmen:
quelle
Ich habe die Antwort von iuriimoz geändert . Gerade die viewWillAppear-Methode ersetzt:
Fügen Sie außerdem tableView.layoutIfNeeded () hinzu
Für iOS 10
habe für mich einen "Fade" -Animationseffekt auf viewWillAppear
quelle