未调用 cellForItem 或 sizeForItem
Posted
技术标签:
【中文标题】未调用 cellForItem 或 sizeForItem【英文标题】:cellForItem or sizeForItem not called 【发布时间】:2017-08-31 15:11:57 【问题描述】:我是第一次尝试 IGListKit,但我似乎很早就遇到了障碍
lazy var collectionView: UICollectionView =
let collectionView = UICollectionView(frame: .zero, collectionViewLayout: UICollectionViewFlowLayout())
collectionView.backgroundColor = .white
return collectionView
()
override func viewDidLoad()
super.viewDidLoad()
self.view.addSubview(self.collectionView)
let updater = ListAdapterUpdater()
let adapter = ListAdapter(updater: updater, viewController: self, workingRangeSize: 0)
adapter.collectionView = self.collectionView
adapter.dataSource = self
override func viewDidLayoutSubviews()
super.viewDidLayoutSubviews()
collectionView.frame = view.bounds
和
extension SocialViewController: ListAdapterDataSource
func objects(for listAdapter: ListAdapter) -> [ListDiffable]
// this can be anything!
return [ "Foo" as ListDiffable, "Bar" as ListDiffable]
func listAdapter(_ listAdapter: ListAdapter, sectionControllerFor object: Any) -> ListSectionController
return TopNewsSectionController()
func emptyView(for listAdapter: ListAdapter) -> UIView?
return UIImageView(image: UIImage(named: "swords"))
类 TopNewsSectionController: ListSectionController
override func sizeForItem(at index: Int) -> CGSize
return CGSize(width: collectionContext!.containerSize.width, height: 55)
override func cellForItem(at index: Int) -> UICollectionViewCell
return collectionContext!.dequeueReusableCell(of: TopNewsCollectionViewCell.self, for: self, at: index)
但我的 cellForItem 或 sizeForItem 都没有被调用 我做错了什么?
【问题讨论】:
您是否尝试在 IGListAdapterDataSource 方法(对象、节控制器)中放置断点以确保它们被调用?我还假设您在 sizeForItem() 和 cellForItem() 中放置了一个断点,对吗?您使用的是哪个版本的 IGListKit?你的设置对我来说很好。您可能想尝试将其作为一个问题发布到 GitHub 上,我们在那里更加活跃:github.com/Instagram/IGListKit/issues/new 【参考方案1】:尝试将适配器声明为类属性而不是方法属性,
let updater = ListAdapterUpdater()
let adapter = ListAdapter(updater: updater, viewController: self, workingRangeSize: 0)
adapter.collectionView = self.collectionView
到
lazy var adapter: ListAdapter =
return ListAdapter(updater: ListAdapterUpdater(), viewController: self, workingRangeSize: 0)
()
【讨论】:
【参考方案2】:致电adapter.performUpdatesAnimated
或adapter.reloadDataWithCompletion
(首次加载)更新
【讨论】:
【参考方案3】:viewDidLoad
返回时,您的 adapter
对象将被销毁。尝试将其声明为您的 ViewController
的属性。
【讨论】:
以上是关于未调用 cellForItem 或 sizeForItem的主要内容,如果未能解决你的问题,请参考以下文章
为啥在索引路径中的 UICollectionView 的 cellForItem 在一开始就被所有单元格调用
collectionView.cellForItem(at:indexPath)无法正常工作
UICollectionView cellForItem(at:) 崩溃