如何使collectionViewCell自动调整高度?

Dmi*_*pov 8 ios autolayout uicollectionview uicollectionviewcell

我使用了collectionView的自动调整流程布局的功能

self.flow = [[UICollectionViewFlowLayout alloc] init];
self.flow.scrollDirection = UICollectionViewScrollDirectionVertical;
self.flow.sectionInset = UIEdgeInsetsZero;
self.flow.estimatedItemSize = CGSizeMake(320, 48);
Run Code Online (Sandbox Code Playgroud)

我希望单元格将填充CollectionView的宽度全宽(widthCell = widthCollectionView)

但我得到了整个尺寸的自动调整工作.我尝试使用内容压缩/拥抱优先级 - 不起作用.

随着CollectionView的宽度等于320px,我得到了标签内容大小的单元格大小.

我的细胞看起来像 在此输入图像描述

约束水平:H:| -8- [img(48)] - 8- [label] -8- |

如何使自动调整仅适用于垂直而不适用于水平?

Dmi*_*pov 13

我找到了解决方案.

CollectionViewCell有一个委托preferredLayoutAttributesFittingAttributes

因此,此函数将layoutAttributes设置为estimatedItemSize

你需要做下一步(高度)

- (UICollectionViewLayoutAttributes *)preferredLayoutAttributesFittingAttributes:(UICollectionViewLayoutAttributes *)layoutAttributes {
    UICollectionViewLayoutAttributes *attr = [super preferredLayoutAttributesFittingAttributes:layoutAttributes]; //Must be called
    CGRect frame = attr.frame;
    frame.size.width = layoutAttributes.size.width; //Key here
    attr.frame = frame;
    return attr;
}
Run Code Online (Sandbox Code Playgroud)

相同的你可以做的更喜欢大小,宽度,所以使恒定的高度(frame.size.height = layoutAttributes.size.height).

如果你只是复制layoutAttributes并改变宽度,将无效!

你必须打电话给超级.

  • 你如何使用它?你在哪里设置那个代表? (2认同)