相等的水平间距UICollectionView,包括插图 - UICollectionViewFlowLayout?

Posted

技术标签:

【中文标题】相等的水平间距UICollectionView,包括插图 - UICollectionViewFlowLayout?【英文标题】:Equal horizontal spacing UICollectionView, including insets - UICollectionViewFlowLayout? 【发布时间】:2017-11-09 18:29:53 【问题描述】:

我试图在两个UICollectionViewCell 和一个UICollectionViewCell 和屏幕边框之间创建相等的水平间距。它应该看起来像 this。

我认为可以使用UICollectionViewFlowLayout 调整每个UICollectionViewCell 的宽度,因此无论手机大小如何,它们的间距都相同。每行应始终只有 3 个单元格。

【问题讨论】:

【参考方案1】:

首先你应该为控制器添加UICollectionView的所有参数的常量:

let itemsPerRow = 3
let spaceBetweenItems: CGFloat = 20.0
let spaceBetweenLines: CGFloat = 40.0
let itemHeight: CGFloat = 50.0

您提到项目的宽度应该是可调整的。你可以用这个函数来计算它:

var itemWidth: CGFloat 
    return (self.collectionView.frame.width - CGFloat(self.itemsPerRow + 1) * self.spaceBetweenItems) / CGFloat(self.itemsPerRow)

当然,您需要自定义 UICollectionView 实例的布局:

var collectionViewLayout: UICollectionViewFlowLayout 
    let result = UICollectionViewFlowLayout()
    result.itemSize = CGSize(width: self.itemWidth, height: self.itemHeight)
    result.minimumInteritemSpacing = self.spaceBetweenItems
    result.minimumLineSpacing = self.spaceBetweenLines
    result.sectionInset = UIEdgeInsets(top: 0.0, left: self.spaceBetweenItems, bottom: 0.0, right: self.spaceBetweenItems)
    result.scrollDirection = .vertical
    return result

在函数viewDidLoad 或您的控制器中,您应该调用setupCollectionView()。下面是这个函数的代码:

func setupCollectionView() 
    self.collectionView.frame = self.view.frame
    self.collectionView.collectionViewLayout = self.collectionViewLayout

你会看到这样的:

【讨论】:

以上是关于相等的水平间距UICollectionView,包括插图 - UICollectionViewFlowLayout?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个水平菜单,每个项目之间的宽度和间距相等?

纵向和横向的 UICollectionView 单元格间距

java 自动为RecyclerView项添加相等的间距。可以处理水平,垂直和网格显示模式

java 自动为RecyclerView项添加相等的间距。可以处理水平,垂直和网格显示模式

UICollectionView 布局间距问题。单元格之间的空间太大

如何使用自动布局来布局三个项目水平相等