使用 invalidationContext 重新加载 UICollectionView 的补充视图(标题)时遇到问题
Posted
技术标签:
【中文标题】使用 invalidationContext 重新加载 UICollectionView 的补充视图(标题)时遇到问题【英文标题】:Trouble reloading UICollectionView's supplementary view (header) with invalidationContext 【发布时间】:2017-04-20 12:12:48 【问题描述】:我有一个用例,我有一个 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】:在您的插入项方法和删除项方法中,只需将计数分配给标题视图标签,这样您就不必重新加载集合视图
let headerView = collectionViewDemo.supplementaryView(forElementKind: UICollectionElementKindSectionHeader, at: [0,0]) as? DemoCollectionReusableView
headerView?.textLabel.text = self.count
【讨论】:
以上是关于使用 invalidationContext 重新加载 UICollectionView 的补充视图(标题)时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章
使用 appcache 在服务器上重新部署后 Meteor 不断重新加载
避免页面重新加载以及使用 Javascript/JQuery 重新加载时 [重复]