如何将 sizeForItemAt 放在后台线程上?



我正在尝试根据图片的纵横比等因素动态调整单元格大小,以创建自定义布局。这些计算似乎减慢了我的应用程序的加载速度。我想将此过程移动到后台线程。下面是函数的代码。是否可以在后台线程上运行它,提供临时单元格大小,直到计算完成,以免降低应用程序的整体性能,感谢您的帮助。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return self.collectionViewSizeCalculator!.sizeForPhoto(at: indexPath)
}

具有返回值的UICollectionView(或UITableView(委托和数据源方法必须在调用它的主队列上返回一个值,并且应立即计算该返回值(或尽可能接近即时(。任何延迟都会导致集合视图(或表视图(滞后。

一种解决方案是将像元大小存储为数据模型的一部分。最初使用初始估计大小填充大小。让您的sizeForItemAt返回数据模型中当前具有的任何大小。

同时,在后台运行一个进程(针对所有单元格或根据需要为每个单元格单独执行此操作(以计算单元格的实际大小。返回实际值时,更新数据模型并在主队列上重新加载该单元格。

相关内容

  • 没有找到相关文章

最新更新