2016技术笔记

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调整一下,并把显示的内容调整了就可以啦~

加油~

上一篇下一篇

猜你喜欢

热点阅读