У меня проблема с тем, чтобы анимация коллапса клеток выглядела плавно.
Изображение стоит тысячи слов.Вот два GIF-изображения одного и того же табличного представления:
Свертывание работает очень хорошо для ячейки "6", ноне для "5".Похоже, что весь контент UITableView подпрыгивает перед выполнением анимации свертывания.
Я не , использующий UITableViewAutomaticDimension
для UITableView rowHeight
.Вместо этого я предоставляю высоту строки методом tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath)
и расширяю / сворачиваю ячейку, используя табличное представление beginUpdates
/ endUpdates
.Как вы можете видеть, я также прокручиваю к расширенной строке, используя tableView.scrollToRow(at: indexPath, at: .none, animated: true)
(но только при расширении, так что это, вероятно, не имеет значения).
Подкласс UITableViewController встроен в UINavigationController с большим заголовком ипанель поиска (здесь не видно, потому что содержимое прокручивается вниз).UINavigationController встроен в UITabBarController.
Вот соответствующая часть раскрытия / свертывания.При передаче параметра nil indexPath
уже развернутая ячейка свернется.
func expandRow(at indexPath: IndexPath?) {
selectedIndexPath = indexPath
tableView.beginUpdates()
tableView.endUpdates()
if let ip = indexPath {
tableView.scrollToRow(at: ip, at: .none, animated: true)
}
}
Этот метод вычисляет высоту строки и вызывается как tableView(_:heightForRowAt:)
и tableView(_:estimatedHeightForRowAt:)
:
private func heightForRow(at indexPath: IndexPath) -> CGFloat {
var height: CGFloat
if selectedIndexPath == indexPath {
// Add some height variety
height = 300 + CGFloat((indexPath.row % 4) * 20)
} else {
height = 70
}
return height
}
Вот репозиторий GitHub: https://github.com/AleksanderMaj/CellCollapse
Есть идеи, как это улучшить?
Эта проблема чувствительна к размерам (эта проблема может не воспроизводиться после выполнения тех же действий на устройстве сдругой размер экрана).Это было записано на имитаторе iPhone 7 с iOS 11.3.
РЕДАКТИРОВАТЬ 1: Важно сохранить автоматическую прокрутку к расширенной ячейке.