1. 程式人生 > >iOS 對網格cell左側對齊佈局

iOS 對網格cell左側對齊佈局

一些簡單的對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