iOS开发

iOS Collection View 编程指导(三)-如何使用

2018-09-26  本文已影响78人  陵无山

UICollectionViewFlowLayout类来管理collectionView中的布局, 它是一个具体的类, 可以直接使用. flow layout实现了一种基于线性的断裂式布局, 也就是说collectionView中的item是按照线性顺序排列的, 该布局会尽量适配item的间距, 使得item排列在同一行, 如果超出一行会接着进行下一行的排列. 图3-1展示了水平方向上的flow layout.

图3-1 使用flow layout布局section和cell

使用flow layout除了可以实现一个网格状的collectionView, 还可以实现更多样式. 比如, 你可以调整间距来实现一个单行滚动的collectionView. 如果item的size可以不同, 这样可以产生非对称效果. 你可以通过代码和xib来配置你的flow layout对象, 步骤如下:

注意:配置layout时, 你至少需要配置cell的宽高, 不然item默认的宽高为0, 导致item不可见

自定义Flow Layout Attributes


flow layout对象暴露了几个属性用于配置item的外观, 当你设置这些属性时, 该属性对所有的item都有起作用. 比如你通过属性itemSize来配置item的大小后, 所有的item大小都和属性中配置的一样.

如果你想item的size和spacing都不一样, 那么你需要实现flow layout的委托UICollectionViewDelegateFlowLayout. 你可以将collectionView的delegate和flow layout的delegate设置成同一个. 当flow layout的delegate实现了相应的方法后, layout对象根据你实现的方法中返回的值来设置item的size和spacing.

设置item的size

图3-2 flow layout中的不同itemSize

注意:如果item的size是不同的, 那么会导致不同行的item的数量不同

设置行间距和itme的间距

图3-3 item的实际间距大于最小间距

使用Section Insets来调节section的margin

section inset是调节cells使用空间的一种手段. 你可以在section的左右, header/footer上下之间插入间距达到调节cell布局的空间大小. 如图3-5所示, 展示section inset的作用.


图3-5 section inset调节cell的可用空间

什么时候使用子类化的Flow Layout


在有的情况下, 使用UICollectionViewFlowLayout满足不了需求, 需要继承UICollectionViewFlowLayout做一些定制化的操作才行. 下面列举了使用子类化UICollectionViewFlowLayout的几种情况:

上面的几种情况和操作也适用于创建自定义的layout, 不过在自定义layout之前考虑一下是否可以使用子类化的flow layout, 如果可以的话, 建议优先使用flow layout的子类, 因为flow layout是经过苹果精心设计的, 效果更好. 事实上, 需要用到自定义layout的情况很少, 因为使用flow layout或继承flow layout可以满足大多数需求. 只有少数情况下才需要自定义layout, 比如, 你的布局不是基于线性的, 或者你的内容不局限在屏幕两个方向上滚动, 你布局中的item经常移动, 在这些情况下用自定义layout更好点.

上一篇下一篇

猜你喜欢

热点阅读