collectionView contentOffset 在分页时更改 - swift - 以编程方式

问题描述

我正在使用 collectionView 构建聊天功能,并在此过程中实现了分页

但是,每当我向模型数组添加更多消息并使用 collectionView.reloadData() 重新加载 collectionView 数据时,内容偏移量不会受到尊重,并且会直接跳到顶部。

这是用于获取和加载更多数据到 collectionView 的代码

fileprivate func fetchMoreMessages(){
    
    let db = Firestore.firestore()
    
    db.collection("Messages").document(currentUserUid!).collection(chatUserUid!).order(by: "timestamp",descending: false).end(beforeDocument: firstDocumentSnapshot!).limit(to: 20).getDocuments { [self] (snapshot,error) in
        if let error = error{
            print("error in retrieving docs",error.localizedDescription)
            return
        }
        
        let firstDoc = snapshot?.documents.first
        self.firstDocumentSnapshot = firstDoc

        var arrayOfDocuments : [MessageModel] = []
        snapshot?.documents.forEach({ (snapshot) in
            let dict = snapshot.data()
            var message = MessageModel()
            message.initiateMessageWith(dict: dict)
            arrayOfDocuments.append(message)
        })
        self.listofMessages.insert(contentsOf: arrayOfDocuments,at: 0)
        self.collectionView.reloadData()
    }
}

并在发生这种情况时立即调用

func scrollViewDidScroll(_ scrollView: UIScrollView) {
    if scrollView.contentOffset.y <= 100{
        if self.isPaginating == false && ((firstDocumentSnapshot?.exists) != nil){
            fetchMoreMessages()
            self.isPaginating = true
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)