在重新加载UICollectionView的数据时,可以通过以下方法来防止调用willDisplay cell:
- 使用UICollectionView的reloadData方法而不是reloadSections或reloadItems方法。reloadData方法会重新加载整个UICollectionView的数据,而不是仅仅刷新指定的sections或items。这样可以避免调用willDisplay cell。
- 在重新加载数据之前,先取消UICollectionView的代理设置。可以通过将UICollectionView的delegate和dataSource属性设置为nil来实现。然后再重新设置代理和数据源,并调用reloadData方法。
- 在重新加载数据之前,可以使用UICollectionView的visibleCells方法获取当前可见的cells,并将其缓存起来。然后在重新加载数据后,再使用UICollectionView的reloadItems方法来刷新这些可见的cells,而不是调用reloadData方法。
- 在重新加载数据之前,可以使用UICollectionView的indexPathsForVisibleItems方法获取当前可见的indexPaths,并将其缓存起来。然后在重新加载数据后,再使用UICollectionView的reloadItems方法来刷新这些可见的indexPaths,而不是调用reloadData方法。
- 在重新加载数据之前,可以使用UICollectionView的indexPathsForVisibleSupplementaryElementsOfKind方法获取当前可见的补充视图的indexPaths,并将其缓存起来。然后在重新加载数据后,再使用UICollectionView的reloadItems方法来刷新这些可见的indexPaths,而不是调用reloadData方法。
总结起来,以上方法都是通过避免调用reloadData方法来防止调用willDisplay cell。通过缓存可见的cells、indexPaths或补充视图的indexPaths,并在重新加载数据后使用reloadItems方法来刷新它们,可以有效地避免调用willDisplay cell。