Replace/update ASCollectionNode 中的布局

Replace/update layout in ASCollectionNode

我正在尝试切换 ASCollectionNode 中的布局。使用标准 UICollectionView 时,您可以调用

self.collectionView.setCollectionViewLayout(layout, animated: true)

到replace/update现有布局。

但是,这不适用于 ASCollectionNode。呼叫

self.collectionView.view.setCollectionViewLayout(layout, animated: true)

什么都不做。如何实现这样的功能?

因此,要实现所描述的功能,需要做的就是摆脱所有 UICollectionViewLayout 个子类,只保留 1 个基础实例 UICollectionViewLayout。然后,覆盖 ASCellNode 子类中的 layoutSpecThatFits 方法和 return 基于某些标志、枚举或任何其他人们认为适合在集合显示模式之间进行选择的机制的布局规范。这本质上是对用于默认集合视图的多种布局机制的替代。然后,使用 collectionView:constrainedSizeForNodeAt: 方法(最有可能在视图控制器中)实现 ASCollectionViewLayoutInspecting 协议,return ASSizeRange 适合每种显示模式。最后,在您的 ASCollectionNode 实例上调用 relayoutItems 方法以启动布局重新计算。如果需要,将其包装在 UIView 动画块中。

P.S。我认为值得一提的是,如果在 collectionView:constrainedSizeForNodeAt: 中你 return 每种显示模式的范围值相同(也许你只想更改单元格内的布局规范,而不是它们的实际大小),那么 relayoutItems 基本上不会做任何事情。 ASDK 将使用缓存的布局,因为它会根据大小范围值未更改的事实将其视为有效。你可能需要想出一些布局失效策略来使 relayoutItems 在这种情况下工作。