Я пытаюсь реализовать просмотр таблицы чата на основе socket.io.В настоящее время он работает, как и ожидалось при начальной загрузке.Тем не менее, при попытке разбить на страницы вверх прокрутка нервная, кто-нибудь знает, как добиться плавной прокрутки, например, Whatsapp или мессенджер?
Эта функция используется для первоначальной загрузки первых 10 сообщений:
func handleGetMessages() {
socket?.on("getMessagesResponse") { [weak self] data,ack in
guard let strongSelf = self else { return }
guard
data.count > 0,
let dataObject = data[0] as? [String: Any]
else { return }
if let error = dataObject["message"] as? String {
strongSelf.showAlert(title: "", message: error, buttonTitle: "Got it")
} else {
let json = JSON(dataObject)
guard let messagesArray = json["messages"].array else { return }
guard let currentPage = json["currentPage"].int else { return }
guard let lastPage = json["lastPage"].int else { return }
strongSelf.currentPage = currentPage
strongSelf.lastPage = lastPage
messagesArray.forEach { messageObject in
guard let messageObject = messageObject.dictionaryObject else { return }
let message = Message(map: Map(mappingType: .fromJSON, JSON: messageObject))
strongSelf.messages.insert(message, at: 0)
}
if strongSelf.isPaginating {
strongSelf.isPaginating = false
strongSelf.chatTableView.reloadData()
} else {
strongSelf.chatTableView.reloadData()
guard strongSelf.chatTableView.numberOfRows(inSection: 0) - 1 > 0 else { return }
let lastRow = strongSelf.chatTableView.numberOfRows(inSection: 0) - 1
strongSelf.chatTableView.scrollToRow(at: IndexPath(row: lastRow, section: 0), at: .top, animated: false)
}
}
}
}
и на willDisplayCell я делаю эту логику, чтобы узнать, достиг ли пользователь вершины или нет, увеличить счетчик страниц на единицу и получить больше сообщений
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == 0 && !isPaginating && currentPage != lastPage {
currentPage += 1
isPaginating = true
getMessages()
}
}
Из написанного кода я ожидал достичь чего-то вродеWhatsApp или мессенджер плавность при прокрутке, но в результате перескок прокрутки.
См. рисунок ниже для решения проблемы: