我知道 UICollectionViewDelegateFlowLayout 是一个协议(protocol),而 UICollectionViewFlowLayout 是一个类,我知道协议(protocol)和类之间的区别。根据我的理解,我可以让一个类遵循 UICollectionViewDelegateFlowLayout 协议(protocol)来实现与从 UICollectionViewFlowLayout 继承的类完全相同的效果。我通过找到协议(protocol)和类之间的这种关系得出了这个结论: UICollectionViewDelegateFlowLayout ------------ UICollectionViewFlowLayout collectionView:layout:sizeForItemAtIndexPath:---- itemSize collectionView:layout:insetForSectionAtIndex:---- sectionInset – collectionView:layout:referenceSizeForHeaderInSection: -- headerReferenceSize – collectionView:layout:referenceSizeForFooterInSection: -- footerReferenceSize
我还阅读了协议(protocol)引用中的以下内容: “此协议(protocol)中的所有方法都是可选的。如果您不实现特定方法,流布局委托(delegate)将使用其自身属性中的值来获取适当的间距信息” 所以我的理解是:如果 CollectionView 具有布局属性和 delegateFlowLayout,则 delegateFlowLayout 可能会覆盖某些内容。换句话说,我可以同时拥有两者,协议(protocol)将具有更高的优先级。对吧?
那么,发明一个协议(protocol)和一个做同样事情的类背后的逻辑是什么?
最佳答案
流布局类是一种“默认”流布局,即使不是大多数情况,它也适用于许多情况。如果您需要 UICollectionViewFlowLayout 无法处理的内容,那么您可以将 UICollectionViewLayout 子类化以提供添加的功能。
委托(delegate)方法仅通过委托(delegate)调用为默认的 UICollectionViewFlowLayout 提供一些有限的自定义。
从文档中,“UICollectionViewDelegateFlowLayout 协议(protocol)定义了一些方法,可以让您与 UICollectionViewFlowLayout 对象协调以实现基于网格的布局。此协议(protocol)的方法定义了网格中项目的大小和项目之间的间距”。
他们做的事情不一样;提供该协议(protocol)是为了让您可以做一些额外的事情,而没有委托(delegate)方法的流布局默认情况下不会做。该协议(protocol)实际上为您提供了更多“控制权”。如果不需要,则不必使用委托(delegate)方法。
没有“优先级”;该协议(protocol)是可选的。所以,如果你不使用 UICollectionViewFlowLayout,你就不会使用该协议(protocol)。
关于ios - UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24047284/