Ich habe eine nicht scrollende UITableView
in einem UIScrollView
. Ich habe die Framegröße des UITableView
auf seine Inhaltsgröße festgelegt.Wann wird die contentSize eines UITableView gesetzt?
Wenn ich eine Zeile zum UITableView
hinzufüge, rufe ich insertRowsAtIndexPaths:withRowAnimation
an: auf dem UITableView
. Dann rufe ich eine Methode den Rahmen der UITableView
, um die Größe:
- (void)resizeTableViewFrameHeight
{
// Table view does not scroll, so its frame height should be equal to its contentSize height
CGRect frame = self.tableView.frame;
frame.size = self.tableView.contentSize;
self.tableView.frame = frame;
}
es aber scheint, dass die contentSize
hat an dieser Stelle nicht aktualisiert worden. Wenn ich den Rahmen in der obigen Methode basierend auf der Anzahl der Zeilen und Abschnitte manuell berechne, funktioniert die Methode ordnungsgemäß.
Meine Frage ist, wie kann ich die UITableView
erhalten, um seine contentSize
zu aktualisieren? Ich nehme an, ich könnte reloadData
anrufen und das würde es wahrscheinlich tun, aber es scheint ineffizient, die gesamte Tabelle neu zu laden, wenn ich gerade eine Zelle einfüge.
Ich habe das versucht, aber es hat nicht für mich funktioniert. Aber ich konnte mir eine andere Lösung einfallen lassen, die ich hier veröffentlicht habe: http://StackOverflow.com/questions/17634617/When-does-guideview-content-size-update-with-row-insert-delete-animation/18665064 # 18665064 – Daren
Oh, das ist nur für die anfängliche contentSize. Ihr Kilometerstand kann in den anderen Fällen variieren, wenn die Größe später geändert wird. – Farthen
Hinweis für diejenigen, für die dies nicht funktioniert - tableView: decuredHeightForRowAtIndexPath versagt mit contentSize, also können Sie Glück haben, indem Sie einfach Ihre Implementierung entfernen. – weienw