Zusammenfassung: Im Bearbeitungsmodus, ich Löschen von Zeilen in einer Tabellenansicht eine benutzerdefinierte Editiersteuerabschnitt, anstatt der Standard-roten Minuszeichen und Bestätigungstaste löschen. Markieren Sie eine Zeile oder mehrere Zeilen und tippen Sie anschließend in der Symbolleiste auf die Schaltfläche Löschen. Es ähnelt dem Verhalten in der Mail-App. Siehe den Screenshot unten.Unregelmäßige Animationen aus UITableView der DeleteRowsAtIndexPaths: withRowAnimation:
Problem: Die Animationen durch Aufrufe deleteRowsAtIndexPaths:withRowAnimation:
sind produziert unregelmäßig. Zum Beispiel, hier ist was passiert, wenn ich die untere Reihe Animation verwenden (dh UITableViewRowAnimationBottom
) die tickte Zeile (Subject # 7) im Screenshot zu löschen:
- Thema # 8 gleitet unter und hinter Thema # 7
- Thema # 8 hinter Thema # 7
- Thema # 8 ersetzt Thema # 7 jarringly
Dies geschieht sowohl auf dem Simulator und auf einem Gerät kurz versteckt. Der automatische Animationstyp (d. H. UITableViewRowAnimationAutomatic
) erzeugt das gleiche unregelmäßige Verhalten, wenn der Betreff Nr. 7 oben gelöscht wird.
Der obere Animationstyp funktioniert wie erwartet im Simulator, erzeugt jedoch inkonsistente, störende Animationen auf einem Gerät.
Die Fade-Animation ist die einzige Animation, die im Simulator und auf einem Gerät wie erwartet funktioniert.
Einzelheiten:
Ich bin iOS 7 und mit Storyboard, reines Autolayout und Core Data-Targeting.
Hier ist die Aktion-Methode, wo ich die Zeilen löschen:
- (void)deleteButtonTapped:(UIBarButton *)sender
{
// update table view's data
[self.listOfItems removeObjectsAtIndexes:self.indexSetOfTickedRows];
// create index paths for ticked rows
NSMutableArray *indexPaths = [[NSMutableArray alloc] init];
[self.indexSetOfTickedRows enumerateIndexesUsingBlock:^(NSUInteger idx, BOOL *stop) {
[indexPaths addObject:[NSIndexPath indexPathForRow:idx inSection:0]];
}];
[self.tableView deleteRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationBottom];
// update Core Data and UI...
}
Was habe ich versucht:
Die Tabellenzelle Unterklasse überschreibt layoutSubviews
. Die unregelmäßigen Animationen bleiben jedoch erhalten, auch wenn ich layoutSubviews
auskommentiere.
Ich habe auch das benutzerdefinierte tickbare Bearbeitungssteuerelement aus den Tabellenzellen entfernt und dann das Löschen einer bestimmten Zeile in der Aktionsmethode fest codiert. Die unregelmäßigen Animationen blieben bestehen.
Wie von anderen vorgeschlagen, habe ich versucht, deleteRowsAtIndexPaths:withRowAnimation:
zwischen den Anrufen beginUpdates
und endUpdates
anzurufen. Dies behebt das Problem nicht.
Irgendwelche Vorschläge, was als nächstes zu tun ist, oder die besten Vermutungen, warum ich diese unregelmäßigen Animationen sehe?
Update (iOS 7.1):
Ausgabe nach iOS 7.1 Targeting bleibt. Bleibt weiterhin auf Fade-Animation angewiesen.
Ich habe ähnliche Probleme, ich bekomme seltsame Animationen, wo die Trennlinie in eine Richtung und der Zellinhalt eine andere bewegt. Wieder verwende ich reines Auto-Layout und iOS7. Scheint mir Buggy. – Camsoft
Ich habe diese Art von Verhalten gesehen, wenn das Threading nicht richtig durchgeführt wird. Das wäre der erste Ort, an dem ich mich umsehen würde. –
Benötigen Sie keine Anrufe zum Starten und Beenden von Updates? – Remover