如何重新加载UICollectionView补充视图(HeaderView)

时间:2017-02-08 08:06:59

标签: objective-c uicollectionview reload uicollectionreusableview

首先要做的事情:

  
      
  1. 我不想重新加载整个CollectionView。
  2.   
  3. 我也不想重新加载该部分(因为它与reloadData相同,因为我的cv只有1个部分)。
  4.   

我在补充视图中放置了一些控件,因为此视图充当标题视图。在某些情况下,我想根据需要隐藏/显示控件。为了做到这一点,我需要重新加载补充视图,因为它的数据已经更新。

我尝试过:

UICollectionViewLayoutInvalidationContext *layoutContext =
[[UICollectionViewLayoutInvalidationContext alloc] init];
[layoutContext invalidateSupplementaryElementsOfKind:UICollectionElementKindSectionHeader
                                        atIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]]];
[[_collectionView collectionViewLayout] invalidateLayoutWithContext:layoutContext];

当然这种崩溃。代码看起来也不正常,但我不确定如何正确构造UICollectionViewLayoutInvalidationContext并告诉collectionview只重新加载补充视图。

感谢。

2 个答案:

答案 0 :(得分:2)

如果您只需要更新特定部分的标题视图,那么您可以执行与此类似的操作:

if let header = collectionView.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: IndexPath(item: 0, section: indexPath.section)) as? MyCollectionHeaderView {
    // Do your stuff here
    header.myLabel.isHidden = true // or whatever
}

代码片段IndexPath(item: 0, section: indexPath.section)可能看起来有点奇怪,但事实证明supplementaryView仅在该部分的第一项上返回。

答案 1 :(得分:-1)

我不确定您是如何对集合视图的单元格进行分组的。

最简单的解决方案是使用以下方法重新加载特定单元格:

Sum(x => (x.FocusEnd - x.FocusStart).TotalSeconds)