Ios Android GridLayout中单元格周围的边距

Ios Android GridLayout中单元格周围的边距,ios,uicollectionview,uicollectionviewcell,uicollectionviewflowlayout,Ios,Uicollectionview,Uicollectionviewcell,Uicollectionviewflowlayout,在Android中,很容易创建带有下一页边距的网格列表: 我为iOS找到了这个解决方案,但它没有在单元格和父视图之间添加边距,只在单元格之间添加边距 let itemSpacing: CGFloat = 3 let itemsInOneLine: CGFloat = 2 flow.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0) let width = UIScreen.main.bounds.size.widt

在Android中,很容易创建带有下一页边距的网格列表:

我为iOS找到了这个解决方案,但它没有在单元格和父视图之间添加边距,只在单元格之间添加边距

let itemSpacing: CGFloat = 3
let itemsInOneLine: CGFloat = 2
flow.sectionInset = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
let width = UIScreen.main.bounds.size.width - itemSpacing * CGFloat(itemsInOneLine - 1) //collectionView.frame.width is the same as  UIScreen.main.bounds.size.width here.
flow.itemSize = CGSize(width: floor(width/itemsInOneLine), height: width/itemsInOneLine)
flow.minimumInteritemSpacing = 3
flow.minimumLineSpacing = 3

我怎样才能解决它


另外,我不想硬编码任何内容,因此它应该可以适用于所有iPhone/iPad设备

将常量为5的前导、尾随和顶部约束添加到集合视图中。这将解决您的保证金问题

将flow.sectionInset=UIEdgeInsets(top:0,left:0,bottom:0,right:0)更改为flow.sectionInset=UIEdgeInsets(上:5,左:5,下:5,右:5)@RajeshKumarR还有什么?谢谢。这正是我所需要的。所以我在每个地方都设置了5个点(对于
minimuminetemspating
minimumlinespating
,集合视图的前导、尾随和顶部约束)我的工具考虑了所有这些边距,间距以获得正确的宽度
let width=UIScreen.main.bounds.size.width-itemspacking*CGFloat(itemsInOneLine-1)-(margin*2)
,两者都
itemSpace
margin
==5。现在它看起来很棒@user924 UIEdgeInsets(顶部:5,左侧:5,底部:5,右侧:5)这两种方法都需要在宽度计算中减去10是的,实际上它比约束的常数好,我们可以在单元格周围设置阴影,所以最好设置
UIEdgeInsets
,我们甚至可以设置
flow.minimuminetemspacing=0
,因为可以通过计算设置同一行中单元格之间的空间使用sectionInset设置单元格所需的宽度比使用constraint添加空格要好。如果您需要为无法使用约束的节使用不同的填充
let itemSpacing: CGFloat = 3
let itemsInOneLine: CGFloat = 2
let flow = UICollectionView().collectionViewLayout as! UICollectionViewFlowLayout
flow.sectionInset = UIEdgeInsets(top: itemSpacing, left: itemSpacing, bottom: itemSpacing, right: itemSpacing)
flow.minimumInteritemSpacing = itemSpacing
flow.minimumLineSpacing = itemSpacing
let cellWidth = (UIScreen.main.bounds.width - (itemSpacing * 2) - ((itemsInOneLine - 1) * itemSpacing)) / itemsInOneLine
flow.itemSize = CGSize(width: cellWidth, height: cellWidth)