如何在 swift 3.0 中制作 5*8 集合视图 [关闭]

Posted

技术标签:

【中文标题】如何在 swift 3.0 中制作 5*8 集合视图 [关闭]【英文标题】:How to make 5* 8 collection view in swift 3.0 [closed] 【发布时间】:2017-08-14 08:59:29 【问题描述】:

我想每次都创建一个 5*8 矩阵的 UICollectionView。 (表示 5 行和 8 列)适用于所有 iphone 屏幕。 而 Collectionview 约束是:

导致superview = 10

到 superview = 10

顶部到超级视图 = 90

从底部到超级视图 = 150

集合视图结果应该显示如下:

结果视图

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 

        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath as IndexPath) as! NavigateCollectionViewCell

        cell.questionLbl.text = items[indexPath.row] as? String
        cell.backgroundColor = UIColor.cyan

        return cell
    

    // MARK: - UICollectionViewDelegate protocol

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
        // handle tap events
        print("You selected cell #\(indexPath.item)!")
    

请帮忙解决这个问题。

【问题讨论】:

self.view.frame.size.width(带空格) / 5 你尝试了什么?听起来您刚刚提出了规范,并且希望有人为您提供代码。 如果您要发布代码,请尝试使其与问题相关。获取单元格和处理选择的方法与集合视图中单元格的布局无关,这就是您的问题。 【参考方案1】:

你可以用

创造欲望
let cellWidth : CGFloat = (self.view.frame.width - 20.0 - (5 * YOUR_CELLSPACING)) / 5.0
let cellHeight : CGFloat = (self.view.frame.height - 260.0 - (8 * LINE_Spacing)) / 8.0
let collectionViewLayout: UICollectionViewFlowLayout = (self.YOUR_COLLECTIONVIEW!.collectionViewLayout as! UICollectionViewFlowLayout)

collectionViewLayout.sectionInset = UIEdgeInsetsMake(0, 0, 0, 0)

collectionViewLayout.itemSize = CGSize(width: cellWidth , height:cellHeight)

这可能会导致不同的高度和视图。

如果你想让你的高度和宽度保持不变,那么你只需这样做

//UICollectioncell 与宽度类似

collectionViewLayout.itemSize = CGSize(width: cellWidth , height:cellWidth)

//高度

//UICollectioncell 与宽度类似

collectionViewLayout.itemSize = CGSize(width: cellHeight , height:cellHeight)

【讨论】:

【参考方案2】:

在您的 collectionView 代表中

func numberOfSections(in collectionView: UICollectionView) -> Int 
        return 8
    

func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int 
        return 5



func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAtIndexPath indexPath: IndexPath) -> CGSize 
        let cellWidth = (UIScreen.main.bounds.width - 20) / 5
        return CGSize(width: cellWidth, height: cellWidth);
    

除了 20 之外,您还可以从边距 + 单元格间距中给出总的前导值 + 尾随值。

【讨论】:

以上是关于如何在 swift 3.0 中制作 5*8 集合视图 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire 在 Xcode 8 Swift 3.0 中获取特定的 JSON?

如何制作一个以 hh:mm:ss:ms 计算的 Swift 3.0 计时器

Swift 3.0:自定义CollectionView标题按钮单击

Xcode 8.0 新特性 & Swift 3.0 增加的变动

在 Xcode 8.0 Swift 3.0 上检测手势

通过向左滑动选择 CollectionView 单元格(Swift 5)