2

我正在使用IGListKit垂直水平显示图像。这就是为什么我使用 嵌套适配器方法在垂直滚动的 collectionView 中具有水平滚动的 collectionView。但是当有许多图像/项目时,每次显示新行时它都会开始滞后。滚动停止几毫秒,然后继续。
我在垂直集合视图(第一个适配器)中设置了一个级别和按钮。在每个垂直集合视图中,我创建了另一个适配器来显示图像。
帮我解决这个滞后问题。
完整项目链接:https ://github.com/sagarthecoder/IGListKit-Dummy-Project
这是我来自 ViewController.swift 文件的部分代码

class ViewController: UIViewController {
   
    @IBOutlet weak var collectionView: UICollectionView!
    lazy var adapter : ListAdapter = {
        return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0)
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        adapter.collectionView = collectionView
        adapter.dataSource = self
    }
}

extension ViewController : ListAdapterDataSource {
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        return someItems;   
    }
    
    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return RootSectionController()  
    }
}

这是我在 RootSectionController.swift 文件中添加另一个适配器的部分代码

class RootSectionController: ListSectionController{
    
    var header : Header! // Items that came from ViewController
    lazy var adapter: ListAdapter = {
          let adapter = ListAdapter(updater: ListAdapterUpdater(),
                                    viewController: self.viewController)
          adapter.dataSource = self
          return adapter
      }()
}

extension RootSectionController {

    override func cellForItem(at index: Int) -> UICollectionViewCell {
        let cell : RootCollectionViewCell = (collectionContext?.dequeueReusableCell(withNibName: "RootCollectionViewCell", bundle: nil, for: self, at: index)) as! RootCollectionViewCell
        
        cell.categoryName.text = header.categoryName
        adapter.collectionView = cell.collectionView
        return cell
        
    }
    override func didUpdate(to object: Any) {
        header = object as? Header
    }
}

extension RootSectionController : ListAdapterDataSource {
    func objects(for listAdapter: ListAdapter) -> [ListDiffable] {
        return someItems 
    }
    
    func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController {
        return UserSectionController()
    }
}

这是我来自 User.Swift 文件的部分代码

class User: NSObject {
    let id : Int
    let name: String
    let imageName : String
}
extension User: ListDiffable {

    func diffIdentifier() -> NSObjectProtocol {
        return id as NSObjectProtocol
    }

    func isEqual(toDiffableObject object: ListDiffable?) -> Bool {
        if (object as? User) != nil  {
            return true
        } else {
            return false
        }
    }
}

这是我的 Header.swift 文件

class Header: NSObject {
    let categoryName : String
}

extension Header : ListDiffable {
    func diffIdentifier() -> NSObjectProtocol {
        return categoryName as NSObjectProtocol
    }
    
    func isEqual(toDiffableObject object: ListDiffable?) -> Bool {
       
        if let object = object as? Header {
            return categoryName == object.categoryName
        } else {
            return false
        }
    }
}
4

1 回答 1

0

确保您没有进行任何不必要的操作(如打印或其他任何操作)。有时打印很多会在调试过程中产生滞后问题。IGListKit 管理您的数据,它不应该因为 IGListKit 而滞后于您的 UI。

于 2021-04-17T11:43:19.367 回答