UITableView ContentSize bei Verwendung dynamischer Höhe auf UITableViewCells
Ich habe die Suche nach dieser, für viele Stunden, aber nicht einen Weg finden, es zu machen.
Ich habe eine UITableView
deren UITableViewCells
verwenden AutomaticDimension
für Höhe:
tableView.RowHeight = UITableView.AutomaticDimension;
tableView.EstimatedRowHeight = 160f;
Das problem ist, wenn ich versuche, zu bekommen tableView ist ContentSize
. Es scheint, berechnet basierend auf EstimatedRowHeight
statt die aktuelle Höhe Ihrer Zeilen. Angenommen, es sind 10 Zellen dann ContentSize der zurückgegebene Wert ist 160x10.
Dann meine Frage ist ob es eine Möglichkeit gibt, dies zu tun.
Jede Hilfe wird wirklich geschätzt... ich benutze Xamarin.iOS aber Obj-C und Swift-Antworten sind natürlich willkommen 🙂
- warum brauchen Sie contentSize des tableView?
- Gut, weil es eingebettet ist in eine ScrollView. Ich weiß, es ist nicht empfohlen, aber es ist eine ziemlich komplexe UI - Es hat einen animierten header wie Twitter-app, also ist es schwierig zu machen, den header der UITableView
- Was werden Sie tun, nachdem man sich die Größe des Inhalts. Ich denke, Sie sind mit unterschiedlichen problem-und Sie versuchen, Sie zu befriedigen, Sie in die falsche Art und Weise. Können Sie Ihre Benutzeroberfläche und teilen mehr details, was du eigentlich machen willst?
- Meine UITableView hat das scrollen deaktiviert, so dass nach Erhalt der ContentSize des UITableView ich bin versucht, in der ScrollView die ContentSize basierend auf diesem Wert
- UITableView hat die default-Eigenschaft des Rollens und es kann dequeue-Zellen basiert auf der datasource. Ich fühle mich nicht wie Sie brauchen, um set-scrollView die Größe des Inhalts. Dennoch, wenn Sie möchten weiterhin mit diesem Ansatz, können Sie heightforrow gegen Schlüssel(indexpath) in einem Wörterbuch nach und am Ende können Sie die Summe dieser Werte. Aber ich glaube nicht, dass so seine guten Ansatz.
- Ali, Vielleicht der tableview ist auf einer Seite, die hat auch eine Sammlung Ansicht von oben oder unten, wie Sie vielleicht sehen, mit einer Nachrichten-app. Es ist einfacher zu erstellen Sie eine Seite mit einer Auflistung und eine Tabelle, als zu versuchen, um eine größere Vielfalt von Zelltypen, die für die Sammlung. Unabhängig davon, sind die Inhalte, die Größe der Tabelle sollte korrekt sein, wenn jemand versucht, es zu benutzen.
- wenn es eine komplexe Benutzeroberfläche und als er erwähnte, er hat deaktiviert das scrollen auf tableview und die Zuordnung der Inhalte Größe der tableView zu scrollview. Im Grunde bedeutet es, er ist nicht mit wiederverwendbaren Zellen wie die Höhe der tableview wird gleich der Inhalt von der Größe dann denke ich, dass anstelle der Verwendung von tableview für dieses bessere Idee erstellen einer Ansicht und das hinzufügen von mehreren Instanzen, die stack-Ansicht.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, @Daniel J ' s Antwort funktioniert nur, weil der Weg der animation completion handler geplant ist - auf dem Gesicht ist, gibt es keine Garantie die Tabelle neu laden müssen geschehen, bevor die animation abgeschlossen ist.
Ich denke, eine bessere Lösung ist (in Swift, wie das ist, was ich mit war):-
Ich doch tatsächlich die animation Verspätung, weil der Effekt, den ich wollte, aber es funktioniert auch mit einer Dauer von null. Rufe ich diese Funktion jedes mal, wenn ich update die Tabelle Inhalten Kenntnis hat und es animiert und ändert, wie notwendig.
Hatte ich ein Szenario, wo ich brauchte, um zu wissen, die contentSize als auch, um das Bild auf einem nicht-fullscreen tableView, das hatte unterschiedliche Zellzahlen in unterschiedlichen Höhen. Dann würde ich einstellen, tableView (über NSLayoutConstraint) die Höhe der Inhalte.
Folgenden gearbeitet, obwohl ich das Gefühl, es ist ein bisschen hacky:
Setup alle code in "viewDidLoad'
Festlegen der rowHeight-automatische
Legen Sie die estimatedRowHeight größer als ich erwartet, dass eine Zelle, die je (in diesem Fall ich hatte nicht erwartet, eine Zelle zu immer höher sein als über 60pts, so geben Sie die geschätzte 120)
Wickeln Sie die tableView neu laden in einem animationsblock, und dann die Abfrage der contentSize und geeignete Maßnahmen ergreifen, die den Abschluss blockieren
funktionierte ohne UITableViewAutomaticDimension und estimatedRowHeight. iOS-11