【发布时间】:2020-08-09 03:59:38
【问题描述】:
我是 SWIFT 的菜鸟,但我正在尝试创建一个 CollectionView。当我在 iPhone 11 模拟器上运行以下代码时,CollectionView 每行给我三个图像,这是我想要的结果。但是,当我在任何其他设备上运行代码时,我会在每行的第一个和第三个单元格之间看到一个空白单元格。下图显示了工作版本(11 max pro)和有缺陷的版本(SE)之间的区别。我不确定我做错了什么或如何纠正它。我愿意接受有关如何修复它或编写代码的更好方法的任何建议。
var collectionViewFlowLayout: UICollectionViewFlowLayout!
let cellIdentifier = "ItemCollectionViewCell"
override func viewDidLoad() {
super.viewDidLoad()
setupCollectionView()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
setupCollectionViewItemSize()
}
private func setupCollectionView(){
collectionView.delegate = self
collectionView.dataSource = self
let nib = UINib(nibName: "ItemCollectionViewCell", bundle: nil)
collectionView.register(nib, forCellWithReuseIdentifier: cellIdentifier)
}
private func setupCollectionViewItemSize(){
if collectionViewFlowLayout == nil {
let numberOfItemsPerRow: CGFloat = 3
let lineSpacing: CGFloat = 5
let interItemSpacing: CGFloat = 5
let width = (collectionView.frame.width - (numberOfItemsPerRow - 1) * interItemSpacing) / numberOfItemsPerRow
let height = width
collectionViewFlowLayout = UICollectionViewFlowLayout()
collectionViewFlowLayout.itemSize = CGSize(width: width, height: height)
collectionViewFlowLayout.sectionInset = UIEdgeInsets.zero
collectionViewFlowLayout.scrollDirection = .vertical
collectionViewFlowLayout.minimumLineSpacing = lineSpacing
collectionViewFlowLayout.minimumInteritemSpacing = interItemSpacing
collectionView.setCollectionViewLayout(collectionViewFlowLayout, animated: true)
}
}
【问题讨论】:
-
是的,我明白这就是正在发生的事情。我的问题是如何解决?
-
当我在高度上做断点时打印以下内容。 numberOfItemsPerRow:3.0,lineSpacing:5.0,interItemSpacing:5.0,Width:134.66666666666666。
-
使用 UICollectionViewDelegateFlowLayout 中的 collectionView(_:layout:sizeForItemAt:) 函数
标签: ios swift xcode uicollectionview