一尘不染

UICellView单元格布局快速

swift

我正在尝试使用UICollectionView创建一个网格,用户可以将其设置为x单元x y单元(在文本框中输入),同时仍在屏幕上占据相同的宽度。

我已经能够创建一个包含正确数量的单元格的网格视图,但是这些视图的布局不正确,即,按5输入7将得到35个单元格,但不能按5输入7个单元格进行布局。这是我到目前为止的代码。

MyCollectionViewCell.swift导入UIKit

class MyCollectionViewCell: UICollectionViewCell {

    @IBOutlet var cellLabel: UILabel!

}

CreateNewProject.swift

class CreateNewProject : UIViewController, UICollectionViewDataSource, UICollectionViewDelegate, UITextFieldDelegate {

    @IBOutlet var widthTextBox: UITextField!

    @IBOutlet var lengthTextBox: UITextField!

    @IBOutlet var myCollection: UICollectionView!

    let reuseIdentifier = "cell" // also enter this string as the cell identifier in the storyboard

    @IBAction func updateView(sender: AnyObject) {
        let widthValue = Int(widthTextBox.text!)
        let lengthValue = Int(lengthTextBox.text!)
        multiplyValue = Int(widthValue! * lengthValue!)
        createArray()
    }


    func createArray() {
        var i = 0
        while i < multiplyValue {
            items.append("")
            i += 1
        }
        myCollection.reloadData()
    }


    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        print(self.items.count)
    }

    // make a cell for each cell index path
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {

        // get a reference to storyboard cell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! MyCollectionViewCell

        // Use the outlet in custom class to get a reference to the UILabel in the cell
        cell.cellLabel.text = self.items[indexPath.item]
        cell.backgroundColor = UIColor.lightGrayColor()

        return cell
    }    
}

我限制了UICollectionView的左侧,右侧和顶部,并希望以编程方式将集合视图中的单元格调整为UICollectionView.width /
x(用户选择的单元格宽度数)。

不确定执行此操作的最佳方法,并且还需要在各个单元格之间保留一些空白。任何帮助将非常感激!


阅读 232

收藏
2020-07-07

共1个答案

一尘不染

简单,添加实现该UICollectionViewDelegateFlowLayout协议的视图控制器扩展:

extension ViewController: UICollectionViewDelegateFlowLayout {
    func collectionView(collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {
        let  size = collectionView.frame.size.width / CGFloat(cols) - CGFloat((cols - 1)) * spacingBetweenCells
        return CGSize(width: size, height: size)
    }
}

spacingBetweenCells 在此表示您要在单元格之间放置的间距。

2020-07-07