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中的自定大小集合视图单元格的主要内容,如果未能解决你的问题,请参考以下文章