2

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

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

替换/更新现有布局。

但是,这不适用于 ASCollectionNode。打电话

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

什么也没做。如何实现这样的功能?

4

1 回答 1

1

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

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

于 2018-04-17T17:34:34.423 回答