无法使用invalidationContext

时间:2017-04-20 12:12:49

标签: ios iphone swift uicollectionview uicollectionviewlayout

我有一个用例,我用UICollectionView来显示照片。此集合视图具有显示照片计数的补充视图(标题)。

我的业务逻辑在某些时候需要从集合视图中insertItems(at:)removeItems(at:),因此需要重新加载补充视图以便更新照片计数。

我正在寻找一个通用的解决方案(UICollectionView扩展会很有利),以便能够重新加载/刷新只是集合视图的补充视图。

不希望解决方案:

  • 重新加载集合视图的整个部分
  • 重新加载集合视图的数据
  • 重绘或重新加载补充视图以外的任何内容

我只需要触发func collectionView(_ collectionView: UICollectionView, viewForSupplementaryElementOfKind kind: String, at indexPath: IndexPath) -> UICollectionReusableView的内容并重新绘制补充视图。

我试过这个,但它与通用NSException崩溃了:

 self.photosCollectionView.insertItems(at: [IndexPath(row: index, section:0)])

 let context = UICollectionViewLayoutInvalidationContext()
                context.invalidateSupplementaryElements(ofKind: UICollectionElementKindSectionHeader, at: [IndexPath(row: 0, section: 0)])

 let layout = self.photosCollectionView.collectionViewLayout as? UICollectionViewFlowLayout
                layout?.invalidateLayout(with: context)

1 个答案:

答案 0 :(得分:1)

在插入项目方法和删除项目方法中,只需将计数分配给标题视图标签,这样您就不必重新加载集合视图

let headerView = collectionViewDemo.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: [0,0]) as? DemoCollectionReusableView
            headerView?.textLabel.text = self.count
相关问题