1.UICollectionView使用流水布局——UICollectionViewFlowLayout時,需要滿足條件:
每個item(即cell)的大小是一樣的,不僅是寬度,還有高度。這樣,當collectionview的寬度發生變化時,item能將其動態填充。
itemSize即為每個cell的尺寸。
collectionview初始化時必須設置一個非空的layout。所以若想使用類似
UICollectionViewController *ctrl = [[UICollectionViewController alloc]init];
來初始化一個collectionviewcontroller,那么就需要重寫它的init方法
-(id)init{UICollectionViewFlowLayout *layout = [[UICollectionViewFlowLayout alloc]init];layout.itemSize = CGSizeMake(100,100);if(self = [super initWithCollectionViewLayout:layout]){//這里不用寫內容
}return self;
}
設置item之間的間距時,可以用以下,并且只適合UICollectionViewFlowLayout
//垂直方向間距
layout.minimumLineSpacing = 0;
//水平方向間距
layout.minimumInteritemSpacing = 0;
?
2.collectionview中的布局方法
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect{}
中返回值是一個數組,存放的是rect范圍內所有cell的布局屬性,即frame。
其中,rect是一個矩形框,它表示的是collectionview的大小位置。即定義了collectionview的大小,那么rect也是返回的該區域內的cell布局。如:
@interface LineLayout(){UIView *_view;
}-(NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect{//取出父類算出的布局屬性NSArray *attsArray = [super layoutAttributesForElementsInRect:rect];if (!_view) {UIView *view = [[UIView alloc]initWithFrame:rect];view.backgroundColor = [UIColor orangeColor];_view = view;[self.collectionView addSubview:view];}return attsArray;
}
而collectionview的定義為
_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth, 300) collectionViewLayout:circle];
效果為:
當collectionview這樣設置時
_collectionView = [[UICollectionView alloc]initWithFrame:CGRectMake(0, 100, mScreenWidth/2, 300) collectionViewLayout:circle];
效果為
?
3.在初次使用Masonry時,若報類似
Demo-collectionviewExample[4443:172886] *** Assertion failure in -[MASViewConstraint install], /Users/Suning/Desktop/study/Demo-collectionviewExample/Pods/Masonry/Masonry/MASViewConstraint.m:345
錯誤,原因在于
使用Masonry為自定義view添加約束時,得先把自定義view添加到父視圖上。
上圖就是錯誤用法,將兩個位置調換下即可。