invalidateLayout with invalidateSupplementaryElements和UICollectionViewLayoutInvalidationContext

时间:2016-11-20 20:59:13

标签: ios swift

我正在尝试刷新页脚(supplementElement)。我正在使用-invalidatelayout方法。基于SO建议here。 Apple文档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中的故事板就在这里 -

enter image description here

“下一步”是具有自定义类“ActivitiesSelectMembersFooterView”的页脚

1 个答案:

答案 0 :(得分:6)

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

更改此行:

let footer_context = UICollectionViewLayoutInvalidationContext()

对此:

let footer_context = UICollectionViewFlowLayoutInvalidationContext()