无法滚动到底部 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的主要内容,如果未能解决你的问题,请参考以下文章

无法滚动到底部

uiscrollview无法滚动到底部

UISearchController 打开后,iOS 13 无法滚动到底部

无法使分屏滚动到底部

在 iOS 8 上,scrollToRowAtIndexPath 无法正确滚动到底部

ExtJS,无法将我的文本区域滚动到底部