如何正确对齐这些collectionview单元格?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何正确对齐这些collectionview单元格?相关的知识,希望对你有一定的参考价值。

我正在创建一个使用集合视图的页面。布局将类似Apple的音乐应用程序,其中每行显示两个方形单元格

I want a layout like this-this layout has super equal margins around but in my app the first collection cell is stuck to the left edge and the 2nd cell is stuck to the right edge

    private let cellReuseIdentifier = "cellReuseIdentifier"

    class FeedViewController: UICollectionViewController {

        override func viewDidLoad() {
            super.viewDidLoad()
            collectionView?.backgroundColor = .white
            setupNavBar()
            setupCollectionView()
        }

        func setupCollectionView() {
            collectionView?.register(FeedCollectionViewCell.self, forCellWithReuseIdentifier: cellReuseIdentifier)
        }

        override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
            return 6
        }

        override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellReuseIdentifier, for: indexPath)
            return cell
        }

    }

    extension FeedViewController: UICollectionViewDelegateFlowLayout {

        func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
            let padding: CGFloat =  25
            let collectionViewSize = collectionView.frame.size.width - padding

            return CGSize(width: collectionViewSize/2, height: collectionViewSize/2)

        }

    }
答案

您可以使用布局属性在集合视图设置功能中设置集合视图插图以及单元格之间所需的空间:

guard let layout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else { return }

layout.sectionInset = UIEdgeInsets(top: yourTopValue, left: yourLeftValue, bottom: yourBottomValue, right: yourRightValue)
layout.minimumInteritemSpacing = yourSpacing
layout.minimumLineSpacing = yourSpacing
另一答案

使用以下代码来满足您的需求。

填充值应该是所有三个空格的添加(左,中,右)让我们假设填充值= 25然后在布局计算中应该考虑75以获得精确的间距。

并将左侧,顶部,中间和右侧空间设置为值25(因为您想在那里添加空间)。

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    let cellWidth: CGFloat = (collectionView.frame.size.width / 2) - ((padding value * 3)/2)
    let cellHeight: CGFloat = (collectionView.frame.size.height / 2)  - ((padding value * 3)/2) 
    return CGSize.init(width: cellWidth, height: cellHeight) 
}

当然它会起作用

以上是关于如何正确对齐这些collectionview单元格?的主要内容,如果未能解决你的问题,请参考以下文章

如何居中对齐 CollectionView 单元格?

如何居中对齐我的 collectionView 单元格?

如何通过CollectionView中的Flow Layout将单元格对齐到顶部

将单个 UICollectionViewCell 对齐到 collectionView 的左侧

如何让 imageView 占用 CollectionView 单元格?

当单元格具有动态宽度时,CollectionView 中的间距不正确?