Ich bin gespannt, wenn die Inhalt Größe UITableView nach dem Einfügen/Löschen Animation Aufruf aktualisiert wird. Ich dachte, es wäre wie bei den meisten [UIView Animation ...] Blöcken, da die Rahmengröße/Inhaltsgröße sofort aktualisiert würde, obwohl die Animation nicht abgeschlossen wurde, aber es scheint nicht so zu sein. Irgendwelche Ideen?Wann wird UITableView Inhalt Größe mit Zeile einfügen/löschen Animation
Antwort
wird die Inhalt Größe nach dem Aufruf von Delegierten über Höhe geändert:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section;
- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section;
Danke für die Antwort. Kann ich irgendwie benachrichtigt werden oder irgendeine Art von Delegiertenmethode, die mir sagt, dass sich die Inhaltsgröße geändert hat? Es scheint passieren, nachdem die Animation abgeschlossen ist, aber ich hoffe, die neue Größe des Inhalts vor, so dass ich Dinge um die Tabelle entsprechend animieren kann – SLEW
Ich habe dies ausprobiert und Log-Anweisungen vor und nach dem ich die tableview aufgerufen: heightForRowAtIndexPath: Methode und Die Inhaltsgröße wurde nicht aktualisiert. Dies hat mir jedoch geholfen, eine Lösung für die Berechnung der Inhaltsgröße zu finden. Ich werde die Lösung als separate Antwort veröffentlichen. – Daren
Leider habe ich nicht in der Lage gewesen, eine gute Möglichkeit zu finden, den Content zu aktualisieren, wenn das Hinzufügen/entweder Zeilen aus einer UITableView zu löschen, aber Ich habe einen Weg gefunden, um zu berechnen, was es sein wird, wenn Sie die Indexpfade der Zellen kennen, die Sie hinzufügen/entfernen.
Mithilfe des Indexpfads der geänderten Zeilen können Sie die Höhen der entsprechenden Zellen mit der Methode tableView: heightForRowAtIndexPath: berechnen und zur aktuellen Höhe der Inhaltsgröße der Tabellenansicht hinzufügen. Hier ist ein Beispiel, wenn Sie nur das Hinzufügen einer Zeile:
[self.tableView insertRowsAtIndexPaths:@[indexPathOfNewRow] withRowAnimation:UITableViewRowAnimationAutomatic];
CGFloat newCellHeight = [self tableView:self.tableView heightForRowAtIndexPath:indexPathOfNewRow];
CGFloat newContentSizeHeight = self.tableView.contentSize.height + newCellHeight
Es ist wie sizeThatFits()
sieht die Höhe eines neuen contentSize
aussetzen können, die anhängig ist. Sie können diese ausstehende Größe zuweisen, um sie für Bildlaufanimationen frühzeitig auflösen zu lassen.
Mit etwas wie folgt aus:
extension UIScrollView {
var pendingContentSize: CGSize {
var tallSize = contentSize
tallSize.height = .greatestFiniteMagnitude
return sizeThatFits(tallSize)
}
func scrollToBottom(animated: Bool) {
contentSize = pendingContentSize
let contentRect = CGRect(origin: .zero, size: contentSize)
let (bottomSlice, _) = contentRect.divided(atDistance: 1, from: .maxYEdge)
guard !bottomSlice.isEmpty else { return }
scrollRectToVisible(bottomSlice, animated: animated)
}
}
Ich bin in der Lage View-Controller-Code wie folgt zu schreiben:
tableView.insertRows(at: [newIndexPath], with: .none)
tableView.scrollToBottom(animated: true)
und haben die Tabelle bewegen den ganzen Weg nach unten (mit dem neuen Inhaltsgröße), anstatt in die vorletzte Zeile zu scrollen (mit der alten Inhaltsgröße).
- 1. Wann wird die contentSize eines UITableView gesetzt?
- 2. Rahmen Rahmen eines UITableView seinen Inhalt Größe
- 3. Wie kann man wissen, wann eine UITableView-Animation abgeschlossen ist?
- 4. Programmaticlaly bewegt Zeilen mit Animation in UITableView
- 5. UITableView Zelle hinzufügen Animation
- 6. UITableView Inhalt Größe bei Verwendung von Auto-Layout
- 7. UITableView Rahmenhöhe Animation Glitch
- 8. UITableView Zelle Höhe Animation
- 9. UIButton Größe ändern mit Animation
- 10. Wie wird die Größe von UITableViewCell an den Inhalt angepasst?
- 11. UITableView Höhenänderung beim Scrollen mit Animation
- 12. UITableView: Löschen von Abschnitten mit Animation
- 13. UITableView scrollViewDidScroll gefeuert auf Animation
- 14. UITableViewCell wird durch seinen Inhalt in der Größe geändert
- 15. UISearchBar überlappt mit UITableView Inhalt, wenn aktiv
- 16. Wie man eine UITableView-Zeile dynamisch mit dem vom Benutzer geänderten Inhalt anwachsen lässt
- 17. UITableView reloadSection und reloadRowsAtIndexPaths verursacht seltsame Animation
- 18. UITableView Chaos mit dem Inhalt der Zeilen
- 19. Inhalt von UITableView dynamisch ändern
- 20. Wie kann ich in einer UITableView wissen, wann scrollRectToVisible für eine Zeile abgeschlossen ist?
- 21. Größe ändern UIView über UITableView
- 22. UITableView mit selbstbemessendem insertRowsAtIndexPaths ändert contentOffset
- 23. Dynamische UILabel Größe für Ansicht vor uitableview
- 24. Ändern der Größe von UITableView programmgesteuert
- 25. UITableView Header zeigt Inhalt dahinter
- 26. Benutzerdefinierte UIToolbar mit Animation die Größe
- 27. Swift UITableView Swipe während der Scroll-Animation
- 28. UITableview mit zwei Daten pro Zeile
- 29. Wie wird der Inhalt von UITableView vertikal ausgerichtet (zentriert)?
- 30. Ändern Sie die Größe von UITableView so hoch, dass sie nur für den gesamten Inhalt passt
Haben Sie das gelöst? Ich stoße auf das gleiche Problem. Einfügen/Löschen von Zeilen, dann erwartet tableView.contentSize zu aktualisieren, aber das scheint asynchron zu sein. – VaporwareWolf