我正在尝试使用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(用户选择的单元格宽度数)。
不确定执行此操作的最佳方法,并且还需要在各个单元格之间保留一些空白。任何帮助将非常感激!
简单,添加实现该UICollectionViewDelegateFlowLayout协议的视图控制器扩展:
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 在此表示您要在单元格之间放置的间距。
spacingBetweenCells