Mam normalne UITableView
w moim UIViewController
, ograniczone do pełnego ekranu. Ten tableView ma niestandardowy interaktywny tableHeaderView
. TableHeaderView ma rozmiar dynamiczny i rozwija się samodzielnie. Plik headerView ma pole tekstowe i zmieni swój rozmiar w zależności od tego, czy pole TextField jest aktywne, czy nie.Komórki znikające podczas animacji UITableView
Problem polega na tym, że komórki u dołu ekranu nie zawsze są prawidłowo animowane podczas zmiany rozmiaru tableHeaderView. Zadzwonię pod tableView.beginUpdates()
i tableView.endUpdates()
po layoutIfNeeded()
w moim bloku animacji. To musi być zrobione, albo komórki nie będą w ogóle podążać za rozmiarem dynamicznym.
Zrobiłem ten gif. Spójrz szczególnie na dolne komórki podczas animacji. Znacznie spowolniłem animację, więc łatwo jest dostrzec problem.
Rozmyślanie: Wydaje mi się, jakby tableView domaga cellForRow:indexPath:
jak tylko zacznie się animacja, i jakoś dowiaduje się, co podać całą tableView będzie po animację i usuwanie niepotrzebnych komórek, mimo że animacja jeszcze się nie zakończyła. Tak samo, gdy zwijamy nagłówek: najniższe komórki nie są animowane w ten sam sposób, co już załadowane komórki. Animowane są w innej animacji ..
Dlaczego tak się dzieje? Czy można temu zapobiec?
Edycja: Kod Animacja
self.navigationController?.setNavigationBarHidden(isEditing, animated: true)
var frame = tableHeaderView.frame
frame.size.height = tableHeaderView.headerHeight(forEditing: isEditing)
UIView.animate(withDuration: 0.3, animations: {
if isEditing{
let point = CGPoint(x: 0, y: -self.topLayoutGuide.length)
self.tableView.setContentOffset(point, animated: false)
}
tableHeaderView.frame = frame
tableHeaderView.layoutIfNeeded()
self.view.layoutIfNeeded()
self.tableView.beginUpdates()
self.tableView.endUpdates()
}) { [weak self](completed:Bool) in
//Do stuff
}
Czy możesz pokazać kod? – jalone
W scenopisie - wybierz scenę -> pokaż inspektora atrybutów -> pod górnymi pasami, odznacz pole pod górnym paskiem. – Pavankumar
@Sti: Użyj należy udostępnić niektóre kod. – Poles