首页 > 解决方案 > Swift - 如何针对不同的 IOS 设备大小调整 UICollectionViewCell 的比例

问题描述

CollectionView 在底部使用 a 作为菜单栏, 我创建了一个自定义类,并制作了 5 个均匀间隔的单元格,这些单元格在 iPhone 8 上ViewController 填充了以下内容,这是预期的结果 -CollectionView

    layout.itemSize = CGSize(width: self.frame.width / 5, height: self.frame.height)
    layout.minimumInteritemSpacing = 0
    layout.minimumLineSpacing = 0

    self.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    self.scrollIndicatorInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
    self.collectionViewLayout = layout;

但是,当我在任何具有更大屏幕的 iPhone 上运行该项目时,我得到以下结果:

集合视图

我的问题是,我怎样才能将单元格放大以适应没有任何边距,即使它需要CollectionView增加它的高度,我希望图像(将放置在单元格中)保持它们与 iPhone 8 的纵横比屏幕。

我可以CollectionViewCell用代码增加每个的大小吗?如果是这样,有没有办法在不计算迄今为止发布的每部 iPhone 的宽度/高度的情况下这样做?

或者有人可以推荐一种不同的方法来实现这一点吗?如果我以错误的方式接近这个。

提前致谢!

标签: swiftuicollectionviewuicollectionviewcellframeuicollectionviewflowlayout

解决方案


看起来视图的宽度在你放线的地方不正确

layout.itemSize = CGSize(width: self.frame.width / 5, height: self.frame.height)

所以用

layout.itemSize = CGSize(width: UIScreen.main.bounds.width / 5, height: self.frame.height)

你也可以实现

func collectionView(_ collectionView: UICollectionView, 
                  layout collectionViewLayout: UICollectionViewLayout, 
           sizeForItemAt indexPath: IndexPath) -> CGSize

符合UICollectionViewDelegateFlowLayout


推荐阅读