其实,即使是用Google来搜“iOS 瀑布流”前面的几条基本上都没法用。
在github上也找不到个好用的“瀑布流”。
可能这个效果本来不叫“瀑布流”吧。
问了几个人,也都说这玩意就叫“瀑布流”。
为了让大家用起来方便,没有效率问题,我撸了一个“瀑布流”,并且就叫“瀑布流”。
基于UICollectionView写了个layout,用起来很简单,接口也只有一个。性能方面,参考了阳神的优化技巧。代码在这:github
关于这个“瀑布流”
首先它用起来很简单。你的cell需要用autolayout,然后配置Collection的layout,不需要设置其DataSource。
写起来大概就是这个样子。
_dataDelegate = [[WELFallDelegate alloc] initWithCollection:_collection cellCount:^NSInteger{
return _datas.count;
} configureCell:^UICollectionViewCell *(WELFallLoadCell loadCell, NSInteger index) {
UICollectionViewCell *cell = loadCell(@"youCellID");
cell.textLabel.text = _data[index];
return cell;
}];
这里只提供了一行2个cell的实现。因为我觉得一行放三个cell显得很拥挤。而兼容iPad又是另一回事。
效率方面,为了使用起来简单,这里会根据cell的autolayout自动算出大小,并在一些地方做了缓存,避免了重复计算。因为是继承了UICollectionViewLayout,所以免去了一些多余的计算。
最后,每个cell的frame只计算一次,如果你需要重新计算布局,例如下拉刷新之类的操作,你需要使用UICollectionView的wel_reloadDataAndDiscardLayout方法。