Wie kann man Zeilen ganz oben in einen UITableView
einfügen, ohne dass der Rest der Zellen nach unten gedrückt wird - so scheint sich die Bildlaufposition nicht zu ändern überhaupt?Einfügen von Zeilen am oberen Rand von UITableView ohne Änderung der Bildlaufposition bei Verwendung von UITableViewAutomaticDimension
Genau wie Facebook und Twitter, wenn neue Posts geliefert werden, werden sie oben eingefügt, aber die Scroll-Position bleibt fest.
Meine Frage ist ähnlich dieser this question. Was meine Frage von dieser Frage unterscheidet, ist, dass ich keine Tabelle mit festen Zeilenhöhen verwende - ich verwende UITableViewAutomaticDimension
und eine estimatedRowHeight
. Daher werden die dort vorgeschlagenen Antworten nicht funktionieren, da ich die Zeilenhöhe nicht bestimmen kann.
Ich habe versucht, diese Lösung, die Zeilenhöhe nicht in Betracht zieht, aber die contentSize
ist immer noch nicht korrekt nach dem Neuladen, weil die contentOffset
nicht die gleiche relative Position ist - die Zellen sind immer noch nach unten gedrückt wo Sie waren vor dem Einsatz. Dies liegt daran, dass die Zelle nicht auf dem Bildschirm gerendert wurde, sodass iOS die entsprechende Höhe nicht berechnet, bis es erscheint. Daher ist contentSize
nicht korrekt.
CGSize beforeContentSize = tableView.contentSize;
[tableView reloadData];
CGSize afterContentSize = tableView.contentSize;
CGPoint afterContentOffset = tableView.contentOffset;
tableView.contentOffset = CGPointMake(afterContentOffset.x, afterContentOffset.y + afterContentSize.height - beforeContentSize.height);
Alain hingewiesen rectForCellAtIndexPath
die IOS zwingt die entsprechende Höhe zu berechnen. Ich kann jetzt die richtige Höhe für die eingefügten Zellen bestimmen, aber die Scroll-Ansicht contentSize
ist immer noch nicht korrekt, wie belegt, wenn ich über alle Zellen iteriere und addiere die Höhen, die größer als contentSize.height
ist. Letztendlich, wenn ich den contentOffset
manuell setze, scrollt er nicht zum richtigen Ort.
Originalcode:
//update data source
[tableView beginUpdates];
[tableView insertRowsAtIndexPaths:newIndexPaths withRowAnimation:UITableViewRowAnimationAutomatic];
[tableView endUpdates];
In diesem Szenario kann, was das gewünschte Verhalten zu erreichen getan werden?
Haben Sie eine Lösung gefunden? –
@AndreyGordeev Nein. Ich verwendete die geschätzte Zeilenhöhe nicht mehr und berechnete manuell die erforderliche Höhe für jede Zeile. – Joey
Wie haben Sie es geschafft, mit dem falschen ContentSize-Problem umzugehen? – goldengil