你也可以使用(偷懒的方式)
collectionView.collectionViewLayout.invalidateLayout() // swift
[[_collectionView collectionViewLayout] invalidateLayout] // objc
更复杂的是提供上下文
collectionView.collectionViewLayout.invalidateLayout(with: context) // swift
[[_collectionView collectionViewLayout] invalidateLayoutWithContext:context] // objc
然后您可以自己创建或配置上下文以告知应更新的内容,请参阅:UICollectionViewLayoutInvalidationContext
它有一个你可以覆盖的函数:
invalidateSupplementaryElements(ofKind:at:) // swift
另一个选项是(如果您已经加载了正确的页眉/页脚/补充视图)并且您只想使用新数据更新视图,而不是使用以下函数之一来检索它:
supplementaryView(forElementKind:at:) // get specific one
visibleSupplementaryViews(ofKind:) // all visible ones
visibleCells 的可见单元格也是如此。仅获取视图而不完全重新加载视图的优点是单元格保留了它的状态。当表格视图单元格使用滑动删除/编辑/等时,这尤其适用于表格视图单元格,因为重新加载单元格后该状态会丢失。
如果你觉得很狂热,你当然也可以编写一些扩展来使用泛型仅检索给定类型的单元格/补充视图
if let view = supplementaryView(forType: MySupplementaryView.self, at: indexPath) {
configure(view, at indexPath)
}
这假设您有一个函数,可以在示例中使用它们的类名注册/出列视图。我发了一篇关于这个的帖子here