如何在部分中设置单元格间距UICollectionView?我知道有一个属性minimumInteritemSpacing我已将其设置为 5.0,但间距未显示为 5.0。我已经实现了 flowout 委托方法。
UICollectionView
minimumInteritemSpacing
- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 5.0; }
我仍然没有得到想要的结果。我认为它的最小间距。有没有什么办法可以设置最大间距?
我知道这个话题很老了,但如果有人仍然需要正确的答案,你需要什么:
覆盖标准流程布局。
添加这样的实现:
```objectivec - (NSArray ) layoutAttributesForElementsInRect:(CGRect)rect { NSArray answer = [super layoutAttributesForElementsInRect:rect];
for(int i = 1; i < [answer count]; ++i) { UICollectionViewLayoutAttributes *currentLayoutAttributes = answer[i]; UICollectionViewLayoutAttributes *prevLayoutAttributes = answer[i - 1]; NSInteger maximumSpacing = 4; NSInteger origin = CGRectGetMaxX(prevLayoutAttributes.frame); if(origin + maximumSpacing + currentLayoutAttributes.frame.size.width < self.collectionViewContentSize.width) { CGRect frame = currentLayoutAttributes.frame; frame.origin.x = origin + maximumSpacing; currentLayoutAttributes.frame = frame; } } return answer;
} ```
其中 maximumSpacing 可以设置为您喜欢的任何值。这个技巧保证单元格之间的空间将完全等于maximumSpacing!
支持最初的问题。我试图将间距设置为 5px,UICollectionView但这不起作用,以及UIEdgeInsetsMake(0,0,0,0)…
UIEdgeInsetsMake(0,0,0,0)
在 UITableView 上,我可以通过直接连续指定 x,y 坐标来做到这一点......
这是我的 UICollectionView 代码:
#pragma mark collection view cell layout / size - (CGSize)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { return [self getCellSize:indexPath]; // will be w120xh100 or w190x100 // if the width is higher, only one image will be shown in a line } #pragma mark collection view cell paddings - (UIEdgeInsets)collectionView:(UICollectionView*)collectionView layout:(UICollectionViewLayout *)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { return UIEdgeInsetsMake(0, 0, 0, 0); // top, left, bottom, right } - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 5.0; }
#import "ViewController.h" #import "MagazineCell.h" // created just the default class. static NSString * const cellID = @"cellID"; @interface ViewController () @end @implementation ViewController #pragma mark - Collection view -(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView { return 1; } -(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { return 30; } -(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath { MagazineCell *mCell = (MagazineCell *)[collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath]; mCell.backgroundColor = [UIColor lightGrayColor]; return mCell; } #pragma mark Collection view layout things // Layout: Set cell size - (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"SETTING SIZE FOR ITEM AT INDEX %d", indexPath.row); CGSize mElementSize = CGSizeMake(104, 104); return mElementSize; } - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section { return 2.0; } - (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section { return 2.0; } // Layout: Set Edges - (UIEdgeInsets)collectionView: (UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section { // return UIEdgeInsetsMake(0,8,0,8); // top, left, bottom, right return UIEdgeInsetsMake(0,0,0,0); // top, left, bottom, right } @end