Табличное представление "прыгает", когда я пытаюсь scrollToRow с UITableViewAutomaticDimension. Исправление также заставляет его прыгать
У меня та же проблема, что и у этой. Я попытался реализовать предлагаемое исправление, и вместо того, чтобы просматривать всю таблицу, а затем снова переходить к последнему ряду, я получил небольшие скачки вверх. Мне нужно сделать анимацию более плавной. Можно ли это сделать с UITableViewAutomaticDimension
?
Мой код, как показано ниже:
@objc fileprivate func addNext() {
guard rowsCount.value < cellModels.count else { return }
let lastIndexPath = IndexPath(row: rowsCount.value, section: 0)
rowsCount.value += 1
CATransaction.begin()
CATransaction.setCompletionBlock({ () -> Void in
self.scrollToLastMessage()
})
tableView.update {
tableView.insertRows(at: [lastIndexPath], with: .none)
}
CATransaction.commit()
}
func scrollToLastMessage()
{
let bottomRow = tableView.numberOfRows(inSection: 0) - 1
let bottomMessageIndex = IndexPath(row: bottomRow, section: 0)
guard bottomRow >= 0
else { return }
CATransaction.begin()
CATransaction.setCompletionBlock({ () -> Void in
self.tableView.scrollToRow(at: bottomMessageIndex, at: .bottom, animated: true)
})
let contentOffset = tableView.contentOffset.y
let newContentOffset = CGPoint(x:0, y:contentOffset + 1)
tableView.setContentOffset(newContentOffset, animated: false)
CATransaction.commit()
}
extension UITableView {
typealias Updates = () -> Void
func update(_ updates: Updates) {
beginUpdates()
updates()
endUpdates()
}
}
Заранее спасибо.
1 ответ
Я решил эту проблему, когда добавил приблизительную высоту строки для моего табличного представления:
var cellHeightsDictionary: [Int:CGFloat] = [:]
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
cellHeightsDictionary[indexPath.row] = cell.frame.size.height
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return cellHeightsDictionary[indexPath.row] ?? 44.0
}