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。