美文网首页
UICollectionView自定义布局

UICollectionView自定义布局

作者: seventhboy | 来源:发表于2018-11-13 14:13 被阅读16次

    关于UICollectionView的自定义布局,最常见的莫过于九宫格了吧,相信绝大多数的app里面多多少少都会用到这样的布局,在没有collectionView的年代,布局九宫格大家是不是跟我一样要用个for循环,然后计算出相应的坐标去排布呢?另外还有在两年前比较流行的 瀑布流布局刚开始怎么实现呢,用scrollView?亦或tableview 但是这两个都太麻烦,不过有了collectionView实现这样的效果就省事多了。

    要自定义UICollectionView布局,就要创建自己的layout继承于UICollectionViewFlowLayout,然后重写父类的几个方法就可以达到我们自定义布局的需求。下来我们来看看UICollectionViewFlowLayout类里一些比较重要的方法

    • (void)prepareLayout;
      为layout显示做准备工作,你可以在该方法里设置一些属性。另外说一下里面可能会遇到的坑,那就是计算单元格大小的时候,比如你要做一个九宫格,那么你计算的每一个宫格的大小 就应该把 宫格的间距 和左右的边距都给算进去 然后再根据具体需求去计算大小 否则计算出来的大小会有问题 一句话 细心为妙!!

    • (nullable NSArray<__kindof UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect
      这个方法返回的是在collectionView的可见范围所有item对应的UICollectionViewLayoutAttributes对象的数组。collectionView的每个item都对应一个专门的UICollectionViewLayoutAttributes类型的对象来表示该item的一些属性,他不是一个视图,但包含了视图所有的属性,比如,frame transform 等

    • (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds{return YES;}
      当前layout的布局发生变动时,是否重写加载该layout。默认返回的是NO,若返回YES,则重新执行上面的两个方法。

    • (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity
      这个方法 是返回最终collectionView的偏移量,也就是collectionView停止滚动时候的偏移量,通过这个方法可以控制你最终想要让collectionView停止的位置

    相关文章

      网友评论

          本文标题:UICollectionView自定义布局

          本文链接:https://www.haomeiwen.com/subject/zmzkfqtx.html