无法滚动到底部 UICollectionview
Posted
技术标签:
【中文标题】无法滚动到底部 UICollectionview【英文标题】:Can' t scroll to bottom UICollectionview 【发布时间】:2018-08-16 14:19:53 【问题描述】:我无法滚动到底部,我尝试了其他解决方案但没有成功。
我正在使用IGLiskit
这是错误:
尝试滚动到无效的索引路径
代码如下:
func initMessages()
DataService.call.retrieveMessages(roomID: room.id ?? "") (success, error, messages) in
if !success
print("error", error!.localizedDescription)
else
guard let messages = messages else return
self.messages = messages
DispatchQueue.main.async
self.adapter.performUpdates(animated: true, completion: nil)
let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView.scrollToItem(at: indexPath, at: .bottom, animated: true)
【问题讨论】:
您尝试在self.collectionView.scrollToItem
之前拨打self.collectionView.reloadData()
吗?因为一旦你分配了self.message
,你的班级就知道你的数据源更新了,但collectionview的数据源没有。
你确定你有第 1 节吗?
【参考方案1】:
您在 collectionview 中有 2 个部分吗?这是忽略我的回答,我希望问题是您正在尝试访问第 1 部分,您只有第 0 部分可用,请尝试更改此代码:
func initMessages()
DataService.call.retrieveMessages(roomID: room.id ?? "") (success, error, messages) in
if !success
print("error", error!.localizedDescription)
else
guard let messages = messages else return
self.messages = messages
DispatchQueue.main.async
self.adapter.performUpdates(animated: true, completion: nil)
// Here in section
let indexPath = IndexPath(item: self.messages.count - 1, section: 0)
self.collectionView.scrollToItem(at: indexPath, at: .bottom, animated: true)
编辑: 好的,如果该部分不起作用,请尝试此扩展:
extension UICollectionView
func scrollToLast()
guard numberOfSections > 0 else
return
let lastSection = numberOfSections - 1
guard numberOfItems(inSection: lastSection) > 0 else
return
let lastItemIndexPath = IndexPath(item: numberOfItems(inSection: lastSection) - 1,
section: lastSection)
scrollToItem(at: lastItemIndexPath, at: .bottom, animated: true)
用法:
collectionView.scrollToLast()
【讨论】:
嗨,当我将section设置为0时它不起作用,所以我尝试了1但它仍然不想工作。 我正在使用 IGListkit 试试这个扩展,扩展 UICollectionView func scrollToLast() guard numberOfSections > 0 else return let lastSection = numberOfSections - 1 guard numberOfItems(inSection: lastSection) > 0 else return let lastItemIndexPath = IndexPath(item: numberOfItems(inSection: lastSection) - 1, section: lastSection) scrollToItem(at: lastItemIndexPath, at: .bottom, animated: true) 用法:collectionView.scrollToLast()以上是关于无法滚动到底部 UICollectionview的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 打开后,iOS 13 无法滚动到底部