问题描述
我想在集合视图中显示不同尺寸(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
):
此单元格的布局使用了 .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 (将#修改为@)