2016笔记——UICollectionView
2018-07-27 本文已影响23人
满庭花醉三千客
最近在做瀑布流,那个叫纠结啊。。
遇到这么个情况:

为什么啊?怎么翻动几下就这样了??
好吧,我才发现这是cell的复用,每次滚动collectionView都会出现混乱,仔细一看,原来是cell的复用机制导致的:
注册之后,在这个代理方法中:

取复用池中的cell:

此时的cell并不为空。
我每次都是直接添加了UILabel,所以会出问题。
然后我就想出了如下方法:

此时看一下效果:

复用池,一开始创建19个label,当创建第20个的时候,发现,复用池中有带label的cell了,然后就直接拿过来使用了。。这个方案Pass。
接下来自然就想到了这个方案:

我根据不同的indexPath来创建不同的label,添加到cell上:

仔细想一下,当我翻看到第30个的时候,我第一个是不是被干掉了?翻回来的时候,第一个cell要重新初始化了,根本达不到效果。
复用仿佛不好使了,那我就直接把cell里的Label拿掉:

每个Label都是重新初始化的,总没有问题了吧?答案是:肯定没问题!
但是如果止步于这样,是不是给内存带来的压力太大了?
还是要考虑label的复用:

最终敲定了这个方案,可以正常显示,而且尽可能的减少了Lable的创建。
效果:

打印台信息:

最终cell构建了56次,label创建了19次。后面的cell是从复用池里取的,cell里面是带有Label的,我们需要把cell的frame调整一下,并把显示的内容调整了就可以啦~
加油~