UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout 的区别

Posted

技术标签:

【中文标题】UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout 的区别【英文标题】:Difference between UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout 【发布时间】:2014-06-04 20:47:49 【问题描述】:

我知道 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 可能会覆盖某些内容。换句话说,我可以同时拥有两者,并且协议将具有更高的优先级。对吧?

那么,发明一个做同样事情的协议和类背后的逻辑是什么?

【问题讨论】:

【参考方案1】:

流布局类是一种“默认”流布局,适用于很多情况,如果不是大多数情况。如果您需要 UICollectionViewFlowLayout 无法处理的内容,则可以将 UICollectionViewLayout 子类化以提供附加功能。

委托方法只是通过委托调用为默认的 UICollectionViewFlowLayout 提供一些有限的自定义。

从文档中,“UICollectionViewDelegateFlowLayout 协议定义了允许您与 UICollectionViewFlowLayout 对象协调以实现基于网格的布局的方法。该协议的方法定义项目的大小和网格中项目之间的间距”。

他们不做同样的事情;提供该协议是为了允许您做一些没有委托方法的流布局默认情况下不会做的额外事情。实际上,该协议为您提供了更多的“控制权”。如果不需要委托方法,则不必使用它们。

没有“优先级”;该协议是可选的。因此,如果您不使用 UICollectionViewFlowLayout,则不要使用该协议。

【讨论】:

以上是关于UICollectionViewDelegateFlowLayout UICollectionViewFlowLayout 的区别的主要内容,如果未能解决你的问题,请参考以下文章