我现在有一个collectionView,每行有4个单元格。
我设置了如下所示的布局
let width = UIScreen.main.bounds.width / 4
let layout: UICollectionViewFlowLayout = UICollectionViewFlowLayout()
layout.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
layout.itemSize = CGSize(width: width, height: width)
layout.minimumInteritemSpacing = 0
layout.minimumLineSpacing = 0
self.module_CollectionView.collectionViewLayout = layout
应该给我一个collectionView,单元格之间没有任何间距。
但是,我仍然在列之间的空间非常薄(看起来像1px)。
(请参阅下面的截图)
如果单元格宽度是屏幕宽度的1/5或1/3,则可以正常工作。
我猜是因为剩下的还是什么?
如果有人能够指出可能出现的问题会很好。
感谢。
答案 0 :(得分:1)
我认为您可能会设置错误的约束,否则您的代码中没有任何错误。
现在,首先在UIView
中选择一个collectionviewcell
,然后将其设置为四个约束 - top.leading,trailing,bottom
并保持0
。
然后在该视图中添加所有内容(您的视图或图像或按钮)并给出适当的约束。
答案 1 :(得分:0)
您需要实施collectionView(_ collectionView: UICollectionView, layout collectionViewLayout:UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
。
在您的情况下,屏幕宽度为375
,您希望将其分为4
部分。如果您直接将375
划分为4
部分,则会获得带有小数的93.75
。
你应该将它(十进制)舍入为94 + 94 + 94 + 93 = 375
而不是93.75+93.75+93.75+93.75 = 375
的整数。
例如:
override func viewDidLoad() {
super.viewDidLoad()
let screenWidth:Int = UIScreen.main.bounds.width
let parts:CGFloat = 4
var rounding:Int = 0
if(screenWidth.truncatingRemainder(dividingBy: parts) != 0) {
rounding = Int(screenWidth.truncatingRemainder(dividingBy: parts))
}
}
//----
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
var roundingWidth = 0
if(rounding != 0) {
rounding -= 1
roundingWidth = 1
}
return CGSize(width: Int(screenWidth / parts) + roundingWidth, height: yourHeight)
}