如何根据其子图像的纵横比设置 UICollectionViewCell 的高度?

问题描述

我想在集合视图中显示不同尺寸(800x600、800x800、800x1200 等)的图像(每个图像是一个单元格)。 单元格的宽度是静态的,等于集合视图的宽度,但是高度需要是动态的,根据显示图片计算,这样我们就永远不会裁剪任何艺术品!

我正在使用 UICollectionViewCompositionalLayout 和来自专用笔尖的称重传感器,如下所示:

collectionView.register(UINib(nibName: "Image",bundle: nil),forCellWithReuseIdentifier: "ImageCell")

然后

private func cell(collectionView: UICollectionView,indexPath: IndexPath,item: Item) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell...
    cell.setup(...)
    return cell
}

ImageCell 只有一个图像视图被约束到它的超级视图(单元格的 contentView):

cell

此单元格的布局使用了 .estimated 高度:

private func createImageSectionLayout() -> NSCollectionLayoutSection {
    let item = NSCollectionLayoutItem(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .estimated(20)))
    let group = NSCollectionLayoutGroup.horizontal(layoutSize: NSCollectionLayoutSize(widthDimension: .fractionalWidth(1.0),heightDimension: .estimated(20)),subitems: [item])
    let section = NSCollectionLayoutSection(group: group)
    section.interGroupSpacing = 16
    section.contentInsets = NSDirectionalEdgeInsets(top: 0,leading: 16,bottom: 16,trailing: 16)
    return section
}

最后,我使用了 ScaledHeightimageView,它是一个 UIImageView 子类,它根据图像的纵横比(取自 here)计算固有尺寸。

现在的问题是,当我设置单元格并计算内在大小时,imageView 的宽度是故事板中的宽度,而不是父级 UICollectionView 中的宽度,所以我的单元格的高度总是错误的。

有人可以帮助我了解我的设置有什么问题吗?

我尝试过:

  • func collectionView(_ collectionView: UICollectionView,willdisplay cell: UICollectionViewCell,forItemAt indexPath: IndexPath) 中设置单元格
  • 覆盖 layoutSubviews() 子类中的 UICollectionViewCell
  • 从多个地方调用 layoutIfNeeded()

但似乎没有任何效果

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)