我知道UICollectionViewDelegateFlowLayout是一个协议,而UICollectionViewFlowLayout是一个类,我知道协议和类之间的区别。根据我的理解,我可以有一个类遵循UICollectionViewDelegateFlowLayout协议来实现与从UICollectionViewFlowLayout继承的类完全相同的效果。我通过找到协议和类之间的这种关系来得出这个结论: UICollectionViewDelegateFlowLayout ------------- UICollectionViewFlowLayout collectionView:layout:sizeForItemAtIndexPath:---- itemSize collectionView:layout:insetForSectionAtIndex:---- sectionInset - collectionView:layout:referenceSizeForHeaderInSection: - headerReferenceSize - collectionView:layout:referenceSizeForFooterInSection: - footerReferenceSize
我还在协议的参考文献中阅读了以下内容: "本协议中的所有方法都是可选的。如果未实现特定方法,则流布局委托将使用其自身属性中的值来获取适当的间距信息。 所以我的理解是:如果CollectionView具有布局属性和delegateFlowLayout,则delegateFlowLayout可能会覆盖某些内容。换句话说,我可以同时拥有这两个协议,并且优先级更高。正确?
那么,发明一个协议和一个做同样事情的类背后的逻辑是什么?
答案 0 :(得分:4)
流程布局类是一种"默认"流动布局在许多情况下都有效,如果不是大多数情况。如果您需要UICollectionViewFlowLayout无法处理的内容,那么您可以将UICollectionViewLayout子类化以提供添加的功能。
委托方法仅通过委托调用为默认的UICollectionViewFlowLayout提供一些有限的自定义。
从文档中," UICollectionViewDelegateFlowLayout协议定义了一些方法,使您可以与UICollectionViewFlowLayout对象协调以实现基于网格的布局。该协议的方法定义了项目的大小和网格中项目之间的间距"。
他们不做同样的事情;提供的协议允许您执行额外的操作,默认情况下没有委托方法的流布局不会执行。该协议实际上为您提供了更多的控制权。如果您不需要,您不必使用委托方法。
没有"优先级&#34 ;;协议是可选的。因此,如果您不使用UICollectionViewFlowLayout,则不要使用该协议。