Я пытаюсь реализовать добавление новой части информации вверху, когда пользователь прокручивается вверх (чтобы просмотреть историю чата) без каких-либо прыжков, как в Telegram, Whatsup и т. Д.scrolltoitematindexpath всегда возвращается в ту же позицию
Вот мой метод
private var toItem: NSIndexPath?
private func addMoreCells() {
if collectionView.contentOffset.y <= 0 {
guard let userChatUid = user?.chatUid else { return }
guard let ownChatUid = UsersManager.sharedInstance.currentChatUID() else { return }
guard let offset = conversation?.messages.count else { return }
ConversationsManager.sharedInstance.getConversationsWithMoreMessagesFor(ownChatUid, recipient: userChatUid, offset: offset - 1, successHandler: { [weak weakSelf = self] (conversations) in
dispatch_async(dispatch_get_main_queue()) {
if let messagesFromServer = conversations.first?.messages, var messages = weakSelf?.conversation?.messages {
for message in messagesFromServer {
if !messages.contains(message) {
messages.append(message)
}
}
messages = messages.sort({$0.time?.compare($1.time!) == .OrderedAscending})
weakSelf?.conversation?.messages = messages
weakSelf?.collectionView.reloadData()
weakSelf?.toItem = NSIndexPath(forItem: (messages.count - messagesFromServer.count), inSection: 0)
if let item = weakSelf?.toItem{
weakSelf?.collectionView.scrollToItemAtIndexPath(item, atScrollPosition: .Top, animated: false)
}
}
}
}, failHandler: { (error) in
print(error)
})
}
}
, которая запускается из
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
addMoreCells()
}
Первый раз, когда я прокрутки к началу Он работает, как я ожидал (новая порция добавляется, п o прыжки. Я вижу новые данные и могу продолжать прокручивать вверх), но когда я продолжаю прокручивать верх и новые данные добавляются, он всегда возвращается к позиции, когда была добавлена первая информация.
Но я ожидаю, что он должен вернуться к значению messages.count - messagesFromServer.count
. В xCode я вижу, что числа меняются каждый раз, когда я прокручиваю, но scrollToItemAtIndexPath
не работает должным образом
И каждый раз, когда я прокручиваю верх и новые данные, он всегда возвращается в первую позицию, когда первая информация был добавлен.
Может ли кто-нибудь узнать, в чем проблема? Потому что я не могу найти решения, чтобы исправить это.