带有 invalidateSupplementaryElements 和 UICollectionViewLayoutInvalidationContext 的 invalidateLayout

Posted

技术标签:

【中文标题】带有 invalidateSupplementaryElements 和 UICollectionViewLayoutInvalidationContext 的 invalidateLayout【英文标题】:invalidateLayout with invalidateSupplementaryElements and UICollectionViewLayoutInvalidationContext 【发布时间】:2016-11-20 20:59:12 【问题描述】:

我正在尝试刷新页脚 (supplementaryElement)。我正在使用invalidatelayout 方法。基于 SO 建议here。苹果文档here。

我收到以下错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'无效上下文 () 送至 -[UICollectionViewFlowLayout invalidateLayoutWithContext:] 不是 UICollectionViewFlowLayoutInvalidationContext 类型的实例或 子类'

实现代码:

let footer_context = UICollectionViewLayoutInvalidationContext()
footer_context.invalidateSupplementaryElements(ofKind: "ActivitiesSelectMembersFooterView", at: [indexPath])
self.collectionView?.collectionViewLayout.invalidateLayout(with: footer_context)

看起来invalidateLayout 方法需要UICollectionViewFlowLayoutInvalidationContext 而不是UICollectionViewLayoutInvalidationContext

我正在使用 Xcode 8 和 Swift 3。

我在 Xcode 中的故事板在这里 -

“Next”是具有自定义类“ActivitiesSelectMembersFooterView”的Footer

【问题讨论】:

【参考方案1】:

错误消息准确地描述了问题。在 UICollectionViewFlowLayout 对象上调用invalidateLayout(with:) 时,需要传递UICollectionViewFlowLayoutInvalidationContext 的实例。

改变这一行:

let footer_context = UICollectionViewLayoutInvalidationContext()

到这里:

let footer_context = UICollectionViewFlowLayoutInvalidationContext()

【讨论】:

以上是关于带有 invalidateSupplementaryElements 和 UICollectionViewLayoutInvalidationContext 的 invalidateLayout的主要内容,如果未能解决你的问题,请参考以下文章

带有和不带有聚合的 sql 查询

如何翻转正面带有标签而背面带有另一个标签的视图 - 参见图片

CakePHP 如何处理带有/不带有 'id' 字段的 HABTM 表?

带有滚动的 Div 和带有绝对位置的内容

带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢

访问控制允许带有和不带有 www 的来源