其實,即使是用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方法。