CollectionView.collectionViewLayout 与 uicollectionViewFlowLayout 的关系

Relationship between CollectionView.collectionViewLayout and collectionViewFlowLayout

Apples api 显示:collectionView.collectionViewLayout 是一个 UICollectionViewLayout 类型,它继承自 NSObject 。如果我编码它可以很好地工作

UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
layout.minimumLineSpacing = 0.5;

从这段代码我猜collectionViewLayout的类型是:UICollectionViewFlowLayout.

但是如果我像这样自定义定义继承自 UICollectionViewLayout 的布局:

self.collectionView.collectionViewLayout = [[CustomCollectionViewLayout alloc]init];
UICollectionViewFlowLayout *layout = (UICollectionViewFlowLayout *)self.collectionView.collectionViewLayout;
layout.minimumLineSpacing = 0.5;

它崩溃并显示:

-[CustomCollectionViewLayout setMinimumLineSpacing:]: unrecognized selector sent to instance 0x111d0b840

这个结果与我的猜测相反,谁能解释一下,非常感谢

那是因为 UICollectionViewFlowLayoutUICollectionViewLayout 的子类。

UICollectionViewFlowLayout 有一个名为 minimumLineSpacing 的 属性 而 UICollectionViewLayout 没有。

因此当你调用

layout.minimumLineSpacing = 0.5;

在您的布局上 UICollectionViewLayout 应用程序崩溃。

希望对您有所帮助

UICollectionViewFlowLayoutUICollectionViewLayout 的子类,minimumLineSpacingUICollectionViewFlowLayout 的 属性 而不是 UICollectionViewLayout。 如果您的 CustomCollectionViewLayoutUICollectionViewLayout 的子类而不是 UICollectionViewFlowLayout,则设置 minimumLineSpacing 会崩溃