iOS 對網格cell左側對齊佈局
阿新 • • 發佈:2018-12-06
一些簡單的對layout的佈局
- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect { // 獲取所有的item佈局 NSMutableArray * attributes = [[super layoutAttributesForElementsInRect:rect] mutableCopy]; // 設定的最大間距,根據需要修改 CGFloat maximumSpacing = 5.0; if (attributes.count > 0) { UICollectionViewLayoutAttributes *firstAttributes = attributes[0]; CGRect frame = firstAttributes.frame; frame.origin.x = maximumSpacing; firstAttributes.frame = frame; } // 從第二個迴圈到最後一個 for (NSInteger i = 1 ; i < attributes.count ; i++ ) { // 當前的attribute UICollectionViewLayoutAttributes * currentLayoutAttributes = attributes[i]; // 上一個attribute UICollectionViewLayoutAttributes * prevLayoutAttributes = attributes[i - 1]; // 前一個cell的最右邊 CGFloat origin = CGRectGetMaxX(prevLayoutAttributes.frame); // 如果當前一個cell的最右邊加上我們的想要的間距加上當前cell的寬度依然在contentSize中,我們改變當前cell的原點位置 // 不加這個判斷的後果是,UICollectionView只顯示一行,原因是下面所有的cell的x值都被加到第一行最後一個元素的後面了 if (origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width - 20) { if (currentLayoutAttributes.indexPath.row == 0) { CGRect frame = currentLayoutAttributes.frame; frame.origin.x = maximumSpacing; currentLayoutAttributes.frame = frame; } else { CGRect frame = currentLayoutAttributes.frame; frame.origin.x = origin + maximumSpacing; currentLayoutAttributes.frame = frame; } } else { CGRect frame = currentLayoutAttributes.frame; frame.origin.x = maximumSpacing; currentLayoutAttributes.frame = frame; } } return attributes; }
使用很簡單 ,建立一個繼承與UICollectionViewFlowLayout的類,寫上就OK