Ios UICollectionView不符合UICollectionViewDelegateFlowLayout和insets
因此,我有一个CollectionView,其中包含以下代码:Ios UICollectionView不符合UICollectionViewDelegateFlowLayout和insets,ios,swift,uicollectionview,Ios,Swift,Uicollectionview,因此,我有一个CollectionView,其中包含以下代码: class MyViewController: UIViewController { ... @IBOutlet weak var imageCollectionView: UICollectionView! fileprivate let sectionInsets = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1) fileprivate le
class MyViewController: UIViewController {
...
@IBOutlet weak var imageCollectionView: UICollectionView!
fileprivate let sectionInsets = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
fileprivate let itemsPerRow: CGFloat = 3
...
override func viewDidLoad() {
super.viewDidLoad()
imageCollectionView.delegate = self
imageCollectionView.dataSource = self
}
}
...
extension MyViewController : UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
let availableWidth = collectionView.bounds.width - paddingSpace
let widthPerItem = availableWidth / itemsPerRow
return CGSize(width: widthPerItem, height: widthPerItem)
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
insetForSectionAt section: Int) -> UIEdgeInsets {
return sectionInsets
}
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return sectionInsets.left
}
}
我想要的是每行3个单元格,间距非常小,但每当我运行应用程序时,我都会得到如下结果:
其中每个黑色块都是一个单元格
对于我发现的类似问题,答案通常是实现UICollectionViewDelegateFlowLayout函数,我已经完成了这些函数,并且调用了我的函数,但没有按预期工作!即使我手动将widthPerItem
值更改为稍小,它仍然不起作用
有人能看到我是否遗漏了一些明显的东西吗?
谢谢大家! 您是否确保最小项目间距仅设置为1点? 您可以在Interface Builder中或通过重写以下委托方法进行设置:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 1.0;
}
我看到的另一个可能的原因是,availableWidth
除以itemsPerRow
的结果是一个浮点数。最后,单元格宽度和插入宽度之和可能实际超过集合视图宽度0.x
像素。为确保不会发生这种情况,您可能需要使用floor
:
func collectionView(_ collectionView: UICollectionView,
layout collectionViewLayout: UICollectionViewLayout,
sizeForItemAt indexPath: IndexPath) -> CGSize {
let paddingSpace = sectionInsets.left * (itemsPerRow + 1)
let availableWidth = collectionView.bounds.width - paddingSpace
let widthPerItem = floor(availableWidth / itemsPerRow)
return CGSize(width: widthPerItem, height: widthPerItem)
}
你的第一个建议成功了!!非常感谢!