1

我是 iOS 和 Swift 的新手。我创建了一个集合视图,它工作正常,但我想在一行中显示多个项目。我试过但它不起作用。有人能帮我吗?提前致谢。

这是我的代码:

仪表板集合VC

import UIKit

class DashBoardCollectionVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {

    @IBOutlet weak var main_collection_view: UICollectionView!

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

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

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = main_collection_view.dequeueReusableCell(withReuseIdentifier: "identify_collection_cell", for: indexPath) as! DashboardCollectionViewCell
        return cell
    }

    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        var collectionViewSize = collectionView.frame.size
        collectionViewSize.width = collectionViewSize.width/2.0 //Display Three elements in a row.
        collectionViewSize.height = collectionViewSize.height/4.0
        return collectionViewSize
    }

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
        print("Item Clicked : \(indexPath.item)")

    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

    }

}

看起来像这样

在此处输入图像描述

容器视图设计

在此处输入图像描述

我想连续显示两个项目。我怎样才能做到这一点?

4

3 回答 3

4

前段时间我有一个非常相似的问题,它在collectionViewLayout方法中。我的细胞完全是方形的,所以也许这对你没有帮助,或者你可以调整它。这对我有用:

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {

        let width = collectionView.frame.width / 3 - 1
        return CGSize(width: width, height: width)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }

或者,如果我们想要连续 2 个,代码将是:

let width = collectionView.frame.width / 2 - 1

在此处输入图像描述 在此处输入图像描述

此外,通常在情节提要中,当您从对象库中拖动“集合视图”时,单元格会出现在左角,如下图所示 - 也许这不相关,您可以以编程方式设置所有内容,但以防万一与自动布局产生一些冲突。

集合视图故事板

于 2017-09-20T14:16:02.530 回答
1

在计算单元格宽度时考虑边距宽度。您需要从
collectionViewSize.width = collectionViewSize.width/2.0结果中减去边距宽度,即两个单元格之间的空间以及单元格的前导和尾随空间。身高也一样。

于 2017-09-20T11:20:32.847 回答
0
Use this two methods it might work for you
=======================================

    func columnWidth(for collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout) -> CGFloat 
    {
                return self.clView.frame.size.width / 2
    }

func maximumNumberOfColumns(for collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout) -> Int {
                let numColumns: Int = Int(2.0)
                return numColumns
        }
于 2017-09-20T11:12:30.450 回答