Auch einreihige Abschnitte können gewünschte Wirkung erreichen
%Vor%Wenn ein Abschnitt bereits an der angegebenen Indexposition vorhanden ist, wird es eine Indexposition nach unten bewegt. Ссылка :
Wie kann man Zeilen in ein UITableView
ganz oben einfügen, ohne dass der Rest der Zellen nach unten gedrückt wird - so scheint sich die Bildlaufposition überhaupt nicht zu ändern.
Genau wie Facebook und Twitter, wenn neue Posts zugestellt werden, werden sie oben eingefügt, aber die Scroll-Position bleibt unverändert.
Meine Frage ist ähnlich wie diese diese Frage . Was meine Frage von dieser Frage unterscheidet, ist, dass ich keine Tabelle mit festen Zeilenhöhen verwende - ich verwende UITableViewAutomaticDimension
und estimatedRowHeight
. Daher werden die dort vorgeschlagenen Antworten nicht funktionieren, da ich die Zeilenhöhe nicht bestimmen kann.
Ich habe diese Lösung ausprobiert, bei der die Zeilenhöhe nicht berücksichtigt wird, aber die contentSize
ist nach dem Neuladen immer noch nicht korrekt, weil die contentOffset
Menge nicht die gleiche relative Position ist - die Zellen werden immer noch gedrückt vorbei, wo sie vor dem Einsatz waren. Das liegt daran, dass die Zelle nicht auf dem Bildschirm gerendert wurde, daher berechnet iOS die entsprechende Höhe nicht, bis es erscheint, daher ist contentSize
nicht korrekt.
Alain wies auf rectForCellAtIndexPath
hin, was iOS dazu zwingt, die passende Höhe zu berechnen. Ich kann jetzt die richtige Höhe für die eingefügten Zellen bestimmen, aber die contentSize
der Bildansicht ist immer noch nicht korrekt, wie es sich zeigt, wenn ich über alle Zellen iteriere und die Höhen addiere, die größer ist als contentSize.height
. Wenn ich also contentOffset
manuell einstelle, scrollt es nicht zum richtigen Ort.
Ursprünglicher Code:
%Vor%Was kann in diesem Szenario getan werden, um das gewünschte Verhalten zu erreichen?
Bis zur Party, aber das funktioniert sogar, wenn Zellen dynamische Höhen haben (aka UITableViewAutomaticDimension
), keine Notwendigkeit, über Zellen zu iterieren, um ihre Größe zu berechnen, aber funktioniert nur, wenn Elemente ganz am Anfang der tableView und dort hinzugefügt werden ist kein Header, mit ein wenig Mathe ist es wahrscheinlich möglich, dies an jede Situation anzupassen:
Löse das gleiche Problem und finde immer noch keinen eleganten Weg, es zu lösen. Hier ist mein Weg, angenommen, ich möchte moreData.count
-Zellen über der aktuellen Zelle einfügen.
Der Vorteil ist die Position vor und nach dem Einfügen neuer Daten. Der Nachteil ist, dass wir den Bildschirm blinken sehen können (die oberste Zelle zeigt und bewegt sich nach oben)
Ich denke, deine Lösung war fast da. Sie sollten den neuen Y-Offset auf den "vorher" Y-Offset und nicht auf den "nach" setzen.
..., beforeContentOffset.y + afterContentSize.height - beforeContentSize.height
(Sie müssen den beforeContentOffset-Punkt vor den Daten zum erneuten Laden speichern)
Tags und Links uitableview ios uiscrollview