我使用自定义单元格创建了 UICollectionView 。在 viewDidLoad()方法中,我正在注册我的单元类。
collectionView?.register(CustomCell.self, forCellWithReuseIdentifier: cellId)
collectionView?.reloadData()
在调试我的代码以检查行为时,我看到在我注册我的collectionView并使用自定义Cellclass调用collectionView.reloadData()的行中,没有数据源和委托方法像etcForItem那样执行了吗?为什么会这样?
答案 0 :(得分:3)
viewDidLoad()
在您的视图加载完成后调用,但在视图布局之前,即在其框架正确设置之前调用。
根据我的观察,在布局过程中,集合视图会懒洋洋地调用其数据源方法(如cellForItem(at:)
)。毕竟,如果数据源大小为.zero
或其位置当前是非屏幕的,则根本不需要调用数据源方法!
没有理由在viewDidLoad()
中调用您的集合视图的数据源方法 。
据我所知,调用reloadData()
只会丢弃所有可见单元格和装饰视图,以便在下一次布局过程中重新加载 。当集合视图当前可见时,会立即触发新的布局传递,但在viewDidLoad()
中,集合视图甚至不在屏幕上。 (viewDidAppear()
尚未被调用。)
答案 1 :(得分:0)
你正在做的工作人员很奇怪,注册单元格后,你正在重新加载collectionView数据..为什么?当数据数组发生变化时,您应该重新加载数据。但无论如何,尝试在主线程上调用reloadData。
DispathQueue.main.async {
self.collecitonView.reloadData()
}