UICollectionView:有没有办法只重新加载补充意见?
我有一个与每个部分的补充视图的uicollectionview。 在每个补充视图中我都有一些button。 在dataSource方法collectionView:viewForSupplementaryElementOfKind:atIndexPath:我使用indexPath.section设置button标签。 当按下button时,我做了一些委托方法,并发送部分(button.tag)作为参数。
一切工作正常,但问题来了:
- 当我插入或删除一个部分,它必须更新button标签,但我不想重新加载每个部分的所有项目。
我试过了:
- 使用dataSource方法collectionView:viewForSupplementaryElementOfKind:atIndexPath:来获取补充视图,并为每个辅助 视图调用layoutIfNeeded方法,这样补充 视图就是重新加载的,但是这种方法会乘以我的补充 视图 。
- 一个快速的在collectionView.subviews并得到只是补充 视图和调用layoutIfNeeded方法,但它不重新加载,只是布局正在重新加载。
- reloadSections:方法,但会重新加载该部分的所有项目
哦,我使用NSFetchedResultsController (委托)插入和删除部分。
谁能帮我这个? 有没有办法只重新加载补充视图 ? 这种情况下还有其他方法吗?
谢谢!
要重新加载补充视图,可以使用-invalidateLayoutWithContext:
请参阅UICollectionViewLayoutInvalidationContext
和方法的文档-invalidateSupplementaryElementsOfKind:atIndexPaths:
自iOS 8起可用)。
而不是重新加载这些视图,获取每个可见的补充视图的引用,以便您可以更改标记可能已经足够满足您的需要。
有一个简单的方法可以用来做到这一点:
let supplementaryViews = collectionView.visibleSupplementaryViews(ofKind: "identifier")
https://developer.apple.com/documentation/uikit/uicollectionview/1618026-visiblesupplementaryviews