我试图让我的 CollectionView 在 View 出现后滚动它的第一个单元格,然后在按下按钮时再次滚动。问题是 collectionView 没有在任何 View 生命周期函数中生成它的所有单元格。
我的解决方案是在后台线程上创建一个 while 循环,检查是否 collectionView.visibleCells.count > 0
,如果是,则返回主线程并滚动到第一个单元格。但是,我得到一个错误,告诉我我不应该访问 visibleCells
关闭主线程,当我这样做时,应用程序会发出声音。
如何在主线程上实现此功能,或检查后台线程中的单元格数量?
private func scrollToFirst() {
DispatchQueue.global(qos: .background).async { [weak self] in
if (self != nil) {
while(self!.collectionView.visibleCells.count != 0) {
DispatchQueue.main.async { [weak self] in
self!.collectionView.scrollToItem(at: IndexPath(item: 0, section: 0), at: .centeredHorizontally, animated: true)
}
}
}
}
}
最佳答案
有一个委托(delegate)方法willDisplay在collectionViewCell 显示之前被调用。如果您之前没有单元格并且这会被调用,那么您知道您即将从零单元格变为超过零单元格。
关于ios - 在后台线程上访问 UIView 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59975453/