iOS中的自定大小集合视图单元格

Posted

技术标签:

【中文标题】iOS中的自定大小集合视图单元格【英文标题】:Self Sizing Collection View Cell in iOS 【发布时间】:2016-07-16 09:19:57 【问题描述】:

我使用自动布局实现了 UICollection 视图单元。它工作正常。

但我的单元格高度是动态的,因此单元格应该根据约束集更改其高度。

但在任何情况下高度都不会改变。

我的代码

- (void)viewDidLoad 
    [super viewDidLoad];

        UICollectionViewFlowLayout *flowlayout = (UICollectionViewFlowLayout*)_col.collectionViewLayout;
        flowlayout.estimatedItemSize = CGSizeMake(self.view.frame.size.width - 30, 600);


-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

    FirstCell *cell = [_col dequeueReusableCellWithReuseIdentifier:@"FirstCell" forIndexPath:indexPath];
    return  cell;

故事板

模拟器

所有标签都是多行的

帮我解决这个问题

感谢您的宝贵时间

【问题讨论】:

【参考方案1】:

请按照以下内容实现自定尺寸收集单元。

1) 与表格单元格相同,使用约束或覆盖 -sizeThatFits:.

2) Override -[UICollectionReusableView preferredLayoutAttributesFittingAttributes:] 调整由UICollectionViewLayout决定的布局属性。

3) UICollectionViewFlowLayout 上新的estimatedItemSize 属性,相当于UITableView 上的estimatedRowHeight。

【讨论】:

matt 是对的,需要通过覆盖 collectionView:layout:sizeForItemAtIndexPath 来设置【参考方案2】:

ios 10 之前的 iOS 中没有自调整大小的集合视图单元格。(Apple 在 WWDC 视频中声称存在此功能,但事实并非如此。)

您必须实现委托方法collectionView:layout:sizeForItemAtIndexPath 为每个单元格提供大小。如果您愿意,它可以调用systemLayoutSizeFittingSize: 来使用内部约束来执行此操作;但运行时不会神奇地为您做到这一点。

【讨论】:

但是如果我使用单个标签,那么使用相同的代码一切正常。 很高兴听到这个消息。但我坚持我所说的。 [cell systemLayoutSizeFittingSize:UILayoutFittingCompressedSize] 返回 (0,0) 作为 CGSize 为什么? 因为你的内部约束没有完全填满单元格的内部。您需要足够的约束来让单元格由内而外的宽度和高度。 但所有标签都有上、下、左、右约束。这还不够吗?

以上是关于iOS中的自定大小集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章

ios中集合视图中的不同单元格大小

swift中的自定义集合视图单元格

自动大小表格视图单元格扩展高度中的嵌套水平集合视图使集合视图滚动重置当重新加载单元格以累积行

更改集合视图单元格大小

iOS 中的集合视图单元格动画

动态集合视图单元格大小目标c?