FlowLayout布局_UICollectionViewFlowLayout

有關UICollectionViewFlowLout的最經典例子,莫過于瀑布流的布局:

對于UICollectionView的處理都比較簡單,眾所周知的各種炫酷的效果,對于CollectionView功不可沒,下面就以自己所理解的來淺聊一下它;

重點分為2種情況,根據本人做過的效果:

第一種情況:類似瀑布流的布局,核心就在下面的2個系統方法中:

-(void)prepareLayout{

}

解釋下這個方法:這個方法只要FlowLayout的布局發生變化,就會調用,常用來設置如:

大部分cell的frame屬性等。

注意:其中的CollectionView的contentSize是根據itemSize動態計算出來的,不能寫死


// 當出現當前的布局對象時,返回當前的以及之前的所有屬性數組,(注意:一旦計算完畢,所有的屬性會被緩存,不會再被計算)

-(NSArray*)layoutAttributesForElementsInRect:(CGRect)rect {

return self.layoutAttributesArray;

}

以上2個方法用來布局瀑布流的情況所用:code詳見地址:https://github.com/zxwIsCode/WaterFull-


第二種情況為:如蘋果iOS9之后的手機相冊的效果:

處理它的一些方法為:常用為以下3個:

1.是否支持手動改變布局

- (BOOL)shouldInvalidateLayoutForBoundsChange:(CGRect)oldBounds

{

return YES;

}

2.同上一種情況的設計

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{

}

3.處理item之間滑動的動畫(控制Frame的變化)

- (CGPoint)targetContentOffsetForProposedContentOffset:(CGPoint)proposedContentOffset withScrollingVelocity:(CGPoint)velocity {

}

code后續會給出地址:

二者的區別點在于:

當界面的設計如瀑布流特點:所有的frame都不是太固定,需要當前的frame依靠上一個item的frame設計時,采用第一種情況,

當界面中如蘋果相冊的只有最中間的frame需要特殊處理,如尺寸放大縮小,位置發生變化等,需要采用第二種情況設計

綜上為對UICollectionViewFlowLayout的理解與使用

附上大牛參考資料:

http://www.lxweimin.com/p/40868928a1cf

http://www.lxweimin.com/p/83f2d6ac7e68

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容