Ios 对齐集合视图单元格,使其恰好适合每行3个
我试图创建一个图像集合视图,这样每行有3个,中间没有间隔 “我的收藏”视图数据源包括:Ios 对齐集合视图单元格,使其恰好适合每行3个,ios,swift,xcode,uicollectionview,Ios,Swift,Xcode,Uicollectionview,我试图创建一个图像集合视图,这样每行有3个,中间没有间隔 “我的收藏”视图数据源包括: func numberOfSections(in collectionView: UICollectionView) -> Int { return 1 } func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { return pos
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return posts.count
}
这就是我在故事板中的设置方式(imageView宽度为125,是375屏幕宽度的三分之一):
但是,当我运行应用程序并添加一些照片时,它看起来是这样的:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let yourWidth = collectionView.bounds.width/3.0
let yourHeight = yourWidth
return CGSize(width: yourWidth, height: yourHeight)
}
如何修复此问题,以便每行可以看到3个图像?谢谢你的帮助 您必须实现 UICollectionViewDelegateFlowLayout 对于间隔的东西
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "UpperCollectionViewCell", for: indexPath) as! UpperCollectionViewCell
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (self.collectionView.frame.width/3.0) - 5 , height: (self.collectionView.frame.height/4.0))
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
设置collectionViewCells的大小,如下所示:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let yourWidth = collectionView.bounds.width/3.0
let yourHeight = yourWidth
return CGSize(width: yourWidth, height: yourHeight)
}
您还可以添加以下函数以获得正确的collectionViewCells间距:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsets.zero
}
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
}
1-您必须遵守 2-您应该实现方法,如下所示:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let screenWidth = UIScreen.main.bounds.width
let scaleFactor = (screenWidth / 3) - 6
return CGSize(width: scaleFactor, height: scaleFactor)
}
假设最小空间为8-例如-
每行的输出应为三项,正方形大小
备注:如果要将单元格之间的空格设置为零,则scaleFactor
应为:
let scaleFactor = (screenWidth / 3)
希望这有帮助。您必须实施 UICollectionViewDelegateFlowLayout 对于间隔的东西
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 10
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "UpperCollectionViewCell", for: indexPath) as! UpperCollectionViewCell
return cell
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: (self.collectionView.frame.width/3.0) - 5 , height: (self.collectionView.frame.height/4.0))
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
return 2
}
Swift-版本4.2
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let noOfCellsInRow = 3
let flowLayout = collectionViewLayout as! UICollectionViewFlowLayout
let totalSpace = flowLayout.sectionInset.left
+ flowLayout.sectionInset.right
+ (flowLayout.minimumInteritemSpacing * CGFloat(noOfCellsInRow - 1))
let size = Int((collectionView.bounds.width - totalSpace) / CGFloat(noOfCellsInRow))
return CGSize(width: size, height: size)
}
你可以用这个
这段代码是以某种方式编写的,您可以更改截面插入或MinimuminemSpacing,并使用此参数计算和调整大小
您可以使用此代码或从下载项目
func collectionView(collectionView:UICollectionView,布局collectionViewLayout:UICollectionViewLayout,sizeForItemAt indexPath:indexPath)->CGSize{
让flowLayout=collectionViewLayout为!UICollectionViewFlowLayout
让numberofItem:CGFloat=3
让collectionViewWidth=self.collectionView.bounds.width
让外部空间=(numberofItem-1)*flowLayout.minimumInteritemSpacing
让插图=flowLayout.sectionInset.right+flowLayout.sectionInset.left
let width=Int((collectionViewWidth-extraSpace-inset)/numberofItem)
打印(宽度)
返回CGSize(宽度:宽度,高度:宽度)
}
您真的需要此处的收藏视图吗?只需在代码中创建您描述的图像视图网格是非常容易的。如果你不需要任何其他的集合视图功能,为什么要为这么基本的东西设置集合视图呢?我想这是另一种方式,我会在另一个项目中记住它。这个问题现在已经解决了,所以我还是把它作为一个集合视图来保存吧——使用您的方法会有什么好处吗,或者只是一开始就更容易实现吗?唯一的“好处”是您显然不知道如何创建具有所需结构的集合视图。如果问题解决了,一定要坚持下去!