У меня есть UIViewController, который имеет UITableView, который представляет комментарии, извлеченные из живой базы данных Firebase.
Каждый раз, когда приходит новый комментарий, я вызываю
tableView.beginUpdates()
tableView.insertRows(at: [IndexPath(row: self.liveComments.count-1, section: 0)], with: .fade)
tableView.endUpdates()
, чтобы вставить последний комментарийс исчезающей анимацией. Это прекрасно работает.
Однако в каждой ячейке есть метка, показывающая, когда она была опубликована, в виде «секунд, минут или часов назад». Проблема заключается в том, что при поступлении большого количества комментариев метка возраста не обновляется, поскольку существующие ячейки не обновляются, и пользователю кажется, что возраст комментария неправильный.
Я пытался позвонить
tableView.reloadRows(at: self.tableView.indexPathsForVisibleRows ?? [], with: .none)
внутри моего обновленного блока tableView, но анимация все испорчена, так как все видимые ячейки кажутся анимированными странным, «нервным» способом.
У меня естьтакже попытался получить все видимые ячейки и вызвать для них метод обновления их меток времени вручную, но я получаю сбой, когда делаю это, так что, думаю, это не рекомендуется:
if let visibleCells = self.tableView.visibleCells as? [LiveCommentTableViewCell] {
visibleCells.forEach { cell in
cell.updateCommentAgeLabel()
}
Как можноЯ подхожу к этому? Мне просто нужно перезагрузить все видимые ячейки без анимации и последнюю ячейку с постепенным исчезновением анимации. Спасибо!