21.关于使用UICollectionView的一些小技巧


1、在UICollectionView中,有需求要固定headerView。在iOS9之后,可以很简单的设置flowLayout的属性:

@property (nonatomic) BOOL sectionHeadersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);

@property (nonatomic) BOOL sectionFootersPinToVisibleBounds NS_AVAILABLE_IOS(9_0);

        但如果是在iOS9之前如何做到呢?这就需要在自定义布局中不断重新计算表头的位置,然后使其看上去是固定的。

        具体的做法可以参考这个链接


2、在UICollectionView中,当我reloadDada之后,无论如何我拿到的cell都为nil。后来我的解决办法是:

       在[self.footCollectionView performBatchUpdates:nil completion:^(BOOL finished) {}] 的finish Block中获取cell,这样是可以获取到cell的。注意:通过cellForItemAtIndexPath这个函数仅仅能获取到可见cell,如果该cell不可见是获取不到的,如果要获取到,就需要先将该cell移动到可见范围,再进行获取。

       后来老大说还有一个方法可以做到就是在reload之后调用[self.footCollectionView layoutIfNeeded]; 该方法会同步等待布局完成,才会继续执行代码。所以在执行该代码之后就可以顺利的获取到cell了。


3、 performBatchUpdates:completion:方法

      performBatchUpdates:completion: 再次展示了block的强大的一面..这个方法可以用来对collectionView中的元素进行批量的插入,删除,移动等操作,同时将触发collectionView所对应的layout的对应的动画。相应的动画由layout中的下列四个方法来定义:

·      initialLayoutAttributesForAppearingItemAtIndexPath:

·      initialLayoutAttributesForAppearingDecorationElementOfKind:atIndexPath:

·      finalLayoutAttributesForDisappearingItemAtIndexPath:

·      finalLayoutAttributesForDisappearingDecorationElementOfKind:atIndexPath:

      调用这个方法会将布局代理方法全部调用一遍,所以如果想动态更改布局,可以在先做个标记然后再调用该方法,在布局代理方法里根据标记不同设置不同的值。


4、 UICollectionView需要注册cell类,所以如果要使用不同的cell可以动态进行注册,然后调用

[collectionView dequeueReusableCellWithReuseIdentifier:@"FootCollectionViewHotStyleCell" forIndexPath:indexPath] 就可以获取到对应类的cell了。


        以上便是这段时间使用collectionView遇到的一些小问题,mark一下。

        由于这段时间在进行Swift算法库封装,所以没有坚持更新,自我反省一下。end。

   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值