Pozwoliłem użytkownikowi na zmianę kolejności wierszy w tableView
. Ponieważ to zdarzenie wpływa na zawartość - niektóre wartości liczbowe w komórkach powinny być aktualizowane - we wszystkich pozostałych wierszach nazywam reloadData
w moveRowAtIndexPath
. A potem pojawiają się dziwne efekty.Jak ponownie załadować tableview po zmianie kolejności wiersza? Wiersze mają zmienną wysokość
tj. Komórki wydają się zachodzić na siebie podczas dotykania dragger, a niektóre komórki zaczynają poruszać się w górę iw dół. Ważne jest, aby wiedzieć, że wysokość komórek jest różna.
Dziwne, że jeśli usuniemy reloadData
z moveRowAtIndexPath
, wszystkie te zjawiska znikną. Tylko treść jest nieprawidłowa.
Jak zatem ponownie załadować dane po zmianie kolejności?
UPDATE: Co mam zrobić komórek międzyczasie rekonfiguracji w viewDidLayoutSubviews
zamiast rozmowy reloadData
Koniec moveRowAtIndexPath
. Działa to w 90%, jak się spodziewam, ale wciąż wiersze są czasami nieco wyższe, niż powinny.
override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
//..
reorderOccured = true
}
override func viewDidLayoutSubviews() {
if reorderOccured {
for cell in tableView.visibleCells() as! [UITableViewCell] {
let ip = tableView.indexPathForCell(cell)
if ip != nil {
self.configureCell(cell, indexPath: ip!)
}
}
reorderOccured = false
}
}
może Cię to zainteresować: http://stackoverflow.com/questions/30758111/an-extra-view-appears-in-cell-when-pressing-reorder-dragger-why –