具有动态大小单元格间距问题的 UICollectionViewCell

Posted

技术标签:

【中文标题】具有动态大小单元格间距问题的 UICollectionViewCell【英文标题】:UICollectionViewCell With Dynamic Size Cell Spacing Issue 【发布时间】:2018-06-06 13:09:59 【问题描述】:

我正在创建自定义 UICollectionViewCell,它的大小会根据其内容自动设置。

单元格的动态大小有效,但它有额外的空间。

所以我想删除两个单元格之间的多余空间

我也设置了 UICollectionView DataSource 和 Delegate 和 Impalement 它的方法,但它仍然不工作

In One Row 不修复他们唯一的 2 个单元格。它有 1、2 或 3 个单元格,取决于文本

CustomeCollectionViewCell.m

- (CGSize)intrinsicContentSize

    CGSize size = self.lblText.intrinsicContentSize;
    size.width += 48;   // add padding Width that Given in Cell
    size.height += 32;  // add padding Height
    return size;

ViewController.m

@interface ViewController () <UICollectionViewDataSource, UICollectionViewDelegate, UICollectionViewDelegateFlowLayout>
@property (strong, nonatomic) CustomeCollectionViewCell *tempCell;
@property (strong, nonatomic) NSArray *dataArr;
@end


- (void)viewDidLoad 
    [super viewDidLoad];

    self.dataArr = @[@"abcdef”,@"abcdef”,@"abcdef”,@"abcdef”,@"abcdef”];
    self.tempCell = (CustomeCollectionViewCell*) [[[UINib nibWithNibName:@“CustomeCollectionViewCell" bundle:nil] instantiateWithOwner:self options:nil] firstObject];

    [self.collectionView setContentInset:UIEdgeInsetsMake(8, 8, 8, 8)];
    [self.collectionView registerNib:[UINib nibWithNibName:@"CustomeCollectionViewCell" bundle:nil] forCellWithReuseIdentifier:@"CustomeCollectionViewCell"];


- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section 
    return self.dataArr.count;


- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath 
    CustomeCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"CustomeCollectionViewCell" forIndexPath:indexPath];
    cell.lblText.text = [self.dataArr objectAtIndex:indexPath.item];
    cell.backgroundColor = [UIColor blackColor];
    return cell;


- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath 
    self.tempCell.lblText.text = [self.dataArr objectAtIndex:indexPath.item];
    return self.tempCell.intrinsicContentSize;


- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumInteritemSpacingForSectionAtIndex:(NSInteger)section 
    return 0;


- (CGFloat)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout *)collectionViewLayout minimumLineSpacingForSectionAtIndex:(NSInteger)section 
    return 8;

【问题讨论】:

【参考方案1】:

尝试使用以下委托方法添加单元格的动态大小

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath


    return CGSizeMake((self.view.frame.size.width - 15)/2, (self.view.frame.size.width - 15)/2);

【讨论】:

一行中不修复 2 个单元格或三个单元格,这取决于内容

以上是关于具有动态大小单元格间距问题的 UICollectionViewCell的主要内容,如果未能解决你的问题,请参考以下文章

UICollectionView-如何删除第一个单元格上方的间距?

具有单元格间距的 UICollectionView 存在滚动问题

UICollectionView 项目间距不是恒定的

具有调整单元格动画大小的动态单元格大小

表格中的右图未调整大小

具有动态大小的单元格的复杂自动布局