总所周知,在开发过程中,当有类似瀑布流的业务需求的时候,使用uitableView可以实现类似的效果,但是苹果开发出的uicollectionView似乎大大方便了开发者的工作量,使得实现这种效果更加高效。只要我们在使用的时候重写uicollectionView的UICollectionviewLayout就可以实现。
工作原理:就实现瀑布流效果中几个重要的方法进行解析。
1、-(void)prepareLayout 准备好布局后调用该方法。此时collectionView所有属性都已确定。读者在这里可以将collectionView当做画布,有了画布后,我们便可以在其上面画出每个item
2、- (CGSize)collectionViewContentSize //设置collectionView的可显示范围
3、-(NSArray *)layoutAttributesForElementsInRect:(CGRect)rect //返回collectionView视图中所有视图的属性(UICollectionViewLayoutAttributes)数组
4、-(UICollectionViewLayoutAttributes *)layoutAttributesForItemAtIndexPath:(NSIndexPath *)indexPath 返回indexpath对应的每个item的属性,里面可包含frame,设置的高、宽。
5、-(BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)newBounds 当collectionview视图的位置发生改变时候调用。 YES表示重新布局,NO表示不重新布局。
这些方法中最重要的便是3,4方法,在3方法中返回所有视图属性数组,并根据这些属性进行布局,而4方法则返回每个item的属性,我们则在这里设置每个 item的属性(主要是frame),就可以让collectionView按照我们的意愿进行布局了!(在这里我们不需要用到1方法,若item属性根 据滑动改变,此时就需要随时进行布局改变)