Я скачал твой код и сделал несколько настроек, чтобы исправить проблему с глюками.Вот что я сделал.
- установил
estimatedRowHeight
свойство представления таблицы для некоторого числа
init() {
super.init(frame: .zero, style: .plain)
estimatedRowHeight = 50.0
register(MyTableViewCell.self, forCellReuseIdentifier: "cell")
}
создал функцию для обработки действия перезагрузки UITableView без изменения текущего contentOffset
func reloadDataWithoutScroll() {
let lastScrollOffset = contentOffset
beginUpdates()
reloadData()
layoutIfNeeded()
endUpdates()
layer.removeAllAnimations()
setContentOffset(lastScrollOffset, animated: false)
}
Обновлена функция
controllerDidChangeContent
для использования функции
reloadDataWithoutScroll
UIView.performWithoutAnimation {
tableView.performBatchUpdates({
tableView.insertRows(at: inserts, with: .automatic)
})
inserts.removeAll()
tableView.reloadDataWithoutScroll()
}
Когда я выполняю эти изменения, он не прокручивается при добавлении новой строки.Тем не менее, он прокручивает, чтобы показать новую добавленную строку, когда текущий contentOffset равен 0. И я не думаю, что это будет проблемой, если говорить логически.