gpt4 book ai didi

ios - CollectionView 编程滚动

转载 作者:行者123 更新时间:2023-11-30 11:54:38 24 4
gpt4 key购买 nike

我想做的是在内容加载后立即将我的CollectionView滚动到最底部。

这是我的代码;

func bindSocket(){
APISocket.shared.socket.on("send conversation") { (data, ack) in
let dataFromString = String(describing: data[0]).data(using: .utf8)
do {
let modeledMessage = try JSONDecoder().decode([Message].self, from: dataFromString!)
self.messages = modeledMessage
DispatchQueue.main.async {
self.collectionView.reloadData()
let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView.scrollToItem(at: indexPath, at: .bottom, animated: false)
}
} catch {
//show status bar notification when socket error occurs
}
}
}

但它完全不起作用。

顺便说一下,我使用 InputAccessoryView 作为粘性数据输入栏,就像在 iMessage 中一样,并使用 collectionView.keyboardDismissMode = .interactive

谢谢

最佳答案

我的想法是,您可能会在 collectionView 获取可见单元格之前调用 func 或调用重新加载 Collection View ,然后立即滚动项目,此时滚动到 indexPath 将没有意义,因为 Collection View 的内容大小不是尚未更新。

scrollToItem(at:at:animated:)

Scrolls the collection view contents until the specified item is visible.

试试这个:

self.collectionView.reloadData()
let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
let itemAttributes = self.collectionView.layoutAttributesForItem(at: indexPath)
self.collectionView.scrollRectToVisible(itemAttributes!.frame, animated: true)

关于ios - CollectionView 编程滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47957702/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com