×
广告

WWDC16笔记:What's new in UICollectionView

96
Hesse_Huang
2016.06.22 14:30* 字数 449

一、优化UICollectionViewCell的生命周期
在iOS9中, UICollectionViewCell在didEndDisplaying后即进入重用队列中;而在iOS10中,UICollectionViewCell在didEndDisplaying后,不会马上进入重用队列,而是再被引用一段时间,如果在进入重用队列前还需要被显示,此cell会willDisplayCellAtIndexPath.

二、新的UICollectionViewCell加载策略:Cell Pre-Fetching
在iOS9中, 即将显示具有多列数据的新的一行时,会一次性加载要显示的cells;而在iOS10中,会依次加载这些cells,并且加载的多寡会根据滑动速度而定。一旦用户停止了滑动,这些“因惯性而加载出来”的cell会unload掉。此策略解决了快速滑动下带来的掉帧问题。
Cell Pre-Fetching在iOS10中默认开启,关闭方法:

collectionView.isPrefetchingEnabled = false

提醒:
1.将计算量大的工作放在cellForItemAtIndexPath;
2.将计算量少的工作放在willDisplayCell/didEndDisplayingCell,因为这是cell要显示前最后能临时抱佛脚的地方了;
3.即使从cellForItemAtIndexPath返回了cell,这个cell也可能不会显示,如用户突然改变了滑动方向;

三、DataSource Pre-Fetching

Pre-Fetching in UICollectionView.png

Pre-Fetching in UITableView.png

第一个API可结合各类异步网络请求方法一起使用,不过该cancel时就该cancel(使用第二个API)。

提醒:
1.Pre-Fetching是一个“自适应能力”,即当线程忙时,调动Pre-Fetching就不会那么频繁了;
2.该cancel时就该cancel;

四、self-sizing cell
简化estimatedItemSize的计算,现在只需:

layout.estimatedItemSize = UICollectionViewFlowLayoutAutomaticSize

五、interactive reordering
与pagingEnabled = true可以达到与Home Screen一样的体验。

六、UIRefreshControl
现在UIScrollView, UITableView, UICollectionView都可以直接使用UIRefreshControl了。

Swift开发小记
Web note ad 1