【问题标题】:Swift - UICollectionView Displaying Multiple Items In A RowSwift - UICollectionView 连续显示多个项目
【发布时间】:2017-09-20 10:33:30
【问题描述】:

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

这是我的代码:

DashBoardCollectionVC

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?) {

    }

}

看起来像这样

ContainerView 设计

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

【问题讨论】:

标签: ios swift uicollectionview human-interface


【解决方案1】:

前段时间我也遇到过一个很相似的问题,就是在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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      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
              }
      

      【讨论】:

        猜你喜欢
        • 2015-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-09
        相关资源
        最近更新 更多