使用嵌套适配器垂直滚动时出现滞后问题 | IG列表套件
Lag issue while scrolling vertically using nested adapter | IGListKit
我正在使用 IGListKit 显示图像垂直 和水平。这就是为什么我用
嵌套 适配器方法,在垂直滚动的 collectionView 中包含水平滚动的 collectionView。但是当有很多 images/items 时,每次显示新行时它都会开始滞后。滚动停止几毫秒,然后继续。
我在垂直集合视图(第一个适配器)中设置了一个级别和按钮。在每个垂直 Collection 视图中,我创建了另一个适配器来显示图像。
帮我解决这个滞后的问题。
完整项目 link: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
}
}
}
确保您没有进行任何不必要的操作(如打印或其他任何操作)。有时打印很多会在调试过程中产生滞后问题。 IGListKit 管理您的数据,它不应该因为 IGListKit 而滞后于您的 UI。
我正在使用 IGListKit 显示图像垂直 和水平。这就是为什么我用
嵌套 适配器方法,在垂直滚动的 collectionView 中包含水平滚动的 collectionView。但是当有很多 images/items 时,每次显示新行时它都会开始滞后。滚动停止几毫秒,然后继续。
我在垂直集合视图(第一个适配器)中设置了一个级别和按钮。在每个垂直 Collection 视图中,我创建了另一个适配器来显示图像。
帮我解决这个滞后的问题。
完整项目 link: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
}
}
}
确保您没有进行任何不必要的操作(如打印或其他任何操作)。有时打印很多会在调试过程中产生滞后问题。 IGListKit 管理您的数据,它不应该因为 IGListKit 而滞后于您的 UI。