ios - 在后台线程上访问 UIView 的属性

标签 ios swift multithreading asynchronous collectionview

我试图让我的 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/

相关文章:

objective-c - ARC 和重用指针会耗尽内存

iphone - 检查 NSFetchedResultsController 是否不返回任何对象

c# - 使用 Xamarin iOS 获取可用的应用内存

ios - 查看其他 ViewController 后,用户输入数据不会保留

java - 从另一个类访问的单例类

java - 在 Java 动画中使用线程

iphone - 我是否需要昂贵的企业开发者帐户才能使用 TestFlightApp 进行 Beta 测试?

ios - 减少解析 PFFile、图像和文本

swift - 无法使用 Parse 和 Swift 从用户向用户发送推送通知

c++ - 需要帮助来理解 "ABA"问题