为什么 UICollectionView 默认遵循 UICollectionViewDelegateFlowLayout?

Why does UICollectionView conform to UICollectionViewDelegateFlowLayout by default?

我只是对以下在从 xib 文件实例化的 UICollectionViewController 中执行的代码感到困惑:

- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section {
    return 1.0;
}

在协议 UICollectionViewDelegateFlowLayout 中声明。但是,UICollectionViewController 中没有任何地方表明它符合此协议,如 UICollectionViewController:

中声明的那样
NS_CLASS_AVAILABLE_IOS(6_0) @interface UICollectionViewController : UIViewController <UICollectionViewDelegate, UICollectionViewDataSource>

总之可以解释为什么 UICollectionViewController 符合 UICollectionViewDelegateFlowLayout 吗?

默认情况下,将集合视图的布局拖入 xib/storyboard 时的 class 是 UICollectionViewFlowLayout,这就是为什么默认情况下 UICollectionViewDelegateFlowLayout 的委托方法是叫。如果您要在 xib/storyboard 中更改布局对象的 class,将调用特定于 UICollectionViewDelegateFlowLayout 的方法 none。

此外,UICollectionViewController 可能会私下遵守 UICollectionViewDelegateFlowLayout,也可能不会。这并不重要,因为 class 在技术上 不必明确遵守协议才能实现和响应该协议中的方法。