電報、Whatsupなどのようにジャンプせずにトップにスクロールしているとき(チャットの履歴を見るために)、新しい部分の情報を追加することを実装しようとしていますscrolltoitematindexpathが常に同じ位置に戻る
はここで、私はそれは私が(新しい部分を追加した期待どおりに動作先頭にスクロールしていたときに
func scrollViewDidEndDecelerating(scrollView: UIScrollView) {
addMoreCells()
}
初回から起動された私の方法
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)
})
}
}
はnジャンプする。私は新しいデータを見ることができ、上にスクロールし続けることができます)、上にスクロールして新しいデータを追加すると、最初の情報が追加されたときに常にその位置に戻ります。
しかし、値messages.count - messagesFromServer.count
に戻るはずです。 xCodeでは、スクロールするたびに数値が変更されますが、が正しく機能しません。
そして、上にスクロールして新しいデータを追加するたびに、最初の情報を添加した。
誰でも問題を知ることができますか?私はそれを解決する解決策を見つけることができません。