我的UICollectionView
的宽度/高度匹配所有可用空间。
我想在一行中显示两个单元格(两列)
所以一个单元格的宽度应该是UICollectionView
的一半宽度(collectionView.frame.width / 2
)
所以我在UICollectionViewDelegateFlowLayout
函数中以编程方式更改单元格的宽度:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: collectionView.frame.width / 2.0, height: 150)
}
但视觉上的细胞宽度比collectionView.frame.width / 2.0
大得多(在iPhone SE模拟器上测试)
因此它需要超过半宽的屏幕空间
这里我打印了有关尺寸的信息:
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath)
print("didSelectItemAt \(cell.frame.width), table width: \(collectionView.frame.width), item calc width: \(collectionView.frame.width / 2)")
}
didSelectItemAt单元格宽度187.5,表格宽度:375.0,半宽:187.5
为什么会这样?
利润率也存在问题,但首先我必须解决这个问题
更新
虽然它适用于iPhone 6s模拟器(我编辑了图像,在第一行放置两个项目,以检查它们是否合适):
那么iPhone SE有什么问题?
我不想发现其他iPhone或iPad也存在同样的问题
375.0是iPhone 6s和X的大小,而不是iPhone SE的320.0
原因是collectionView的宽度约束是在iPhone 6s模式下设置的,但是当切换到SE模拟器时,此约束没有更新。
我认为存在细胞间距问题。似乎您的实现中存在默认的单元格间距。你应该尝试下面的代码来调整一个rawview集合中的两个单元格:
extension ViewController : UICollectionViewDelegateFlowLayout{
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let collectionViewWidth = collectionView.bounds.width
return CGSize(width: collectionViewWidth/2, height: 150)
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 0
}
}
此外,你应该检查你的UICollectionView
的约束,如果它是你的要求或不。
尝试使用视图中的wide,而不是collectionView。
试试这个:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (view.frame.width / 2.0) - 5, height: 150) // provide little bit space between cells
}
希望这会有所帮助。