У меня нормальный UITableView
в моем UIViewController
, ограниченный полноэкранным. Этот tableView имеет пользовательский интерактивный tableHeaderView
. TableHeaderView имеет динамический размер и расширяется сам по себе. headerView имеет textField и изменяет свой собственный размер в зависимости от того, имеет ли объект textField фокус или нет.Ячейки, исчезающие во время анимации UITableView
Проблема в том, что ячейки в нижней части экрана не всегда анимируются правильно при изменении размера таблицыHeaderView. Я звоню tableView.beginUpdates()
и tableView.endUpdates()
после layoutIfNeeded()
внутри моего блока анимации. Это должно быть сделано, или клетки не будут следовать за динамическим размером вообще.
Я сделал это gif. Посмотрите конкретно на нижние ячейки во время анимации. Я значительно замедлил анимацию, так что легко увидеть проблему.
Спекуляция: Мне кажется, как и Tableview призывает к cellForRow:indexPath:
как только начинается анимация, и как-то узнает, в каком состоянии находится вся Tableview будет после анимации и удаления ненужных клеток, хотя анимация еще не завершена. Точно так же при сглаживании заголовка: самые нижние ячейки не анимируются так же, как и уже загруженные ячейки. Они оживлены с другой анимацией.
Почему это происходит? Можно ли это предотвратить?
Edit: Анимация код
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
}
Вы можете показать код? – jalone
В раскадровке - выберите сцену -> показать атрибут-инспектор -> под верхними барами, отвязать в верхней панели. – Pavankumar
@Sti: использование должно иметь общий код. – Poles