如何在collectionView中重新加载补充视图

Posted

技术标签:

【中文标题】如何在collectionView中重新加载补充视图【英文标题】:how to reload supplementary view in collectionView 【发布时间】:2013-01-12 02:42:57 【问题描述】:

是否有一种简单的方法可以仅在 UICollectionViewFlowLayout 中重新加载补充视图?我不想重新加载整个事情。有可能吗?

【问题讨论】:

【参考方案1】:

查看文档后,我不确定是否要重新加载单个补充视图,但您可以使用 reloadSections: 更新 UICollectionView 中的 1 个或多个部分。 (documentation) 所以当节头需要更新时,可以调用:

目标-C:

[self.collectionView reloadSections:[NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 3)]];

斯威夫特:

self.collectionView?.reloadSections(IndexSet(0 ..< 3))

碰巧调用:

- (UICollectionReusableView *)collectionView: (UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

       //Place logic for handling update here...

【讨论】:

看到很多答案,当集合视图由 NSFetchedResultsController 支持时,这对我来说效果最好。谢谢 @Vitalii,请参阅我的修订版以更好地忠实于 Objective-c 代码(使用范围而不是数组)。此外,collectionView 在UICollectionViewFlowLayout 中是可选的。【参考方案2】:

如果您想从 Controller 更改补充视图的布局或大小,请使用[self.collectionView.collectionViewLayout invalidateLayout]。如果您只想刷新补充视图,请使用[supplementaryView setNeedsDisplay]。如果补充视图很复杂,请同时使用两者和/或将改变其尺寸。

【讨论】:

我可以确认setNeedsDisplay() 有效,尤其是当您需要更改视图的样式时,例如颜色、文本、图像等。如果您的视图控制器使用UICollectionViewDataSource 协议,请使用viewForSupplementaryElementOfKind 方法将IndexPath 对象保存到视图控制器变量,然后使用yourCollectionView.supplementaryView() 获取它以刷新视图

以上是关于如何在collectionView中重新加载补充视图的主要内容,如果未能解决你的问题,请参考以下文章

如何从collectionview重新加载部分

如何在不重新加载图像的情况下重新加载 collectionview 单元格

如何在不重新加载 visibleCell 的情况下在 collectionView 上重新加载数据

添加新数据时如何在保持秩序的同时重新加载collectionview

CollectionView 标题在滚动时停止刷新/重新加载数据

下载图片后重新加载 CollectionView 的单元格