From f5394b7c89ac42753c43247d719df0238da505fa Mon Sep 17 00:00:00 2001 From: "chase.stone" Date: Fri, 18 Dec 2015 17:07:18 +0900 Subject: [PATCH] Optional grid cell's horizon alignment, when 'itemPaddingEnabled' was disabled --- JNWCollectionView/JNWCollectionViewGridLayout.h | 11 +++++++++++ JNWCollectionView/JNWCollectionViewGridLayout.m | 9 +++++++++ demo/JNWCollectionViewDemo/GridDemoViewController.m | 4 ++++ 3 files changed, 24 insertions(+) diff --git a/JNWCollectionView/JNWCollectionViewGridLayout.h b/JNWCollectionView/JNWCollectionViewGridLayout.h index 96e4b5a..6d61610 100644 --- a/JNWCollectionView/JNWCollectionViewGridLayout.h +++ b/JNWCollectionView/JNWCollectionViewGridLayout.h @@ -21,6 +21,12 @@ @class JNWCollectionViewGridLayout; +typedef NS_ENUM(NSUInteger, NSCellAlignment) { + NSCellAlignmentLeft = 0, // Visually left aligned + NSCellAlignmentRight = 1, // Visually right aligned + NSCellAlignmentCenter = 2, // Visually centered +}; + /// The supplementary view kind identifiers used for the header and the footer. extern NSString * const JNWCollectionViewGridLayoutHeaderKind; extern NSString * const JNWCollectionViewGridLayoutFooterKind; @@ -77,4 +83,9 @@ extern NSString * const JNWCollectionViewGridLayoutFooterKind; /// Defaults to 0 @property (nonatomic, assign) CGFloat itemHorizontalMargin; +/// Optional grid cell's horizon alignment, when 'itemPaddingEnabled' was disabled +/// +/// Default to NSCellAlignmentLeft +@property (nonatomic, assign) NSCellAlignment cellAlignment; + @end diff --git a/JNWCollectionView/JNWCollectionViewGridLayout.m b/JNWCollectionView/JNWCollectionViewGridLayout.m index e540be8..a724977 100644 --- a/JNWCollectionView/JNWCollectionViewGridLayout.m +++ b/JNWCollectionView/JNWCollectionViewGridLayout.m @@ -129,6 +129,11 @@ - (void)prepareLayout { } self.numberOfColumns = numberOfColumns; + CGFloat extraHorizonSpace = 0.f; + if (self.itemPaddingEnabled == NO) { + extraHorizonSpace = totalWidth - (self.numberOfColumns * (itemSize.width + self.itemPadding)); + } + CGFloat totalHeight = 0; for (NSUInteger section = 0; section < numberOfSections; section++) { NSInteger numberOfItems = [self.collectionView numberOfItemsInSection:section]; @@ -147,6 +152,10 @@ - (void)prepareLayout { CGPoint origin = CGPointZero; NSInteger column = ((item - (item % numberOfColumns)) / numberOfColumns); origin.x = sectionInsets.left + self.itemPadding + (item % numberOfColumns) * (itemSize.width + self.itemPadding); + if (self.itemPaddingEnabled == NO && self.cellAlignment == NSCellAlignmentCenter) + origin.x += (extraHorizonSpace/2); + else if (self.itemPaddingEnabled == NO && self.cellAlignment == NSCellAlignmentRight) + origin.x += extraHorizonSpace; origin.y = column * itemSize.height + column * verticalSpacing; sectionInfo.itemInfo[item].origin = origin; } diff --git a/demo/JNWCollectionViewDemo/GridDemoViewController.m b/demo/JNWCollectionViewDemo/GridDemoViewController.m index 4b089b0..18289ee 100644 --- a/demo/JNWCollectionViewDemo/GridDemoViewController.m +++ b/demo/JNWCollectionViewDemo/GridDemoViewController.m @@ -28,6 +28,10 @@ - (void)awakeFromNib { JNWCollectionViewGridLayout *gridLayout = [[JNWCollectionViewGridLayout alloc] init]; gridLayout.delegate = self; gridLayout.verticalSpacing = 10.f; + + // ex) Cell Alignment + //gridLayout.itemPaddingEnabled = NO; + //gridLayout.cellAlignment = NSCellAlignmentCenter; self.collectionView.collectionViewLayout = gridLayout; self.collectionView.dataSource = self;