2016笔记——UICollectionView
2018-07-27 本文已影响23人
满庭花醉三千客
最近在做瀑布流,那个叫纠结啊。。
遇到这么个情况:
Simulator Screen Shot 2016年3月30日 10.28.52.png为什么啊?怎么翻动几下就这样了??
好吧,我才发现这是cell的复用,每次滚动collectionView都会出现混乱,仔细一看,原来是cell的复用机制导致的:
注册之后,在这个代理方法中:
屏幕快照 2016-03-30 10.53.47.png取复用池中的cell:
屏幕快照 2016-03-30 10.53.06.png此时的cell并不为空。
我每次都是直接添加了UILabel,所以会出问题。
然后我就想出了如下方法:
屏幕快照 2016-03-30 10.15.21.png此时看一下效果:
Simulator Screen Shot 2016年3月30日 10.15.59.png复用池,一开始创建19个label,当创建第20个的时候,发现,复用池中有带label的cell了,然后就直接拿过来使用了。。这个方案Pass。
接下来自然就想到了这个方案:
屏幕快照 2016-03-30 10.18.38.png我根据不同的indexPath来创建不同的label,添加到cell上:
Simulator Screen Shot 2016年3月30日 11.21.58.png仔细想一下,当我翻看到第30个的时候,我第一个是不是被干掉了?翻回来的时候,第一个cell要重新初始化了,根本达不到效果。
复用仿佛不好使了,那我就直接把cell里的Label拿掉:
屏幕快照 2016-03-30 10.25.21.png每个Label都是重新初始化的,总没有问题了吧?答案是:肯定没问题!
但是如果止步于这样,是不是给内存带来的压力太大了?
还是要考虑label的复用:
屏幕快照 2016-03-30 10.24.18.png最终敲定了这个方案,可以正常显示,而且尽可能的减少了Lable的创建。
效果:
Simulator Screen Shot 2016年3月30日 13.14.29.png打印台信息:
屏幕快照 2016-03-30 13.14.37.png最终cell构建了56次,label创建了19次。后面的cell是从复用池里取的,cell里面是带有Label的,我们需要把cell的frame调整一下,并把显示的内容调整了就可以啦~
加油~