繁体   English   中英

如何设置自定义collectionView单元格框架?

[英]How to set custom collectionView Cell Frame?

我想要第一个UICollectionViewCell按屏幕的全宽显示,并且进一步的UICOllectionViewCell是2 * 2。

为此,我尝试了下面的代码。

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    if indexPath.item == 0 {
        let cell : FirstCell = collectionView.dequeueReusableCell(withReuseIdentifier: "FirstCell", for: indexPath) as! FirstCell

        cell.layoutSubviews()
        return cell
    }
    else {
        let cell : SecondCell = collectionView.dequeueReusableCell(withReuseIdentifier: "SecondCell", for: indexPath) as! SecondCell

        cell.layoutSubviews()
        return cell
    }
}

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

    if indexPath.item == 0 {
        let width   = (UIScreen.main.bounds.size.width - 16)
        return CGSize(width: width, height: 200)
    }
    else {
        let width   = (UIScreen.main.bounds.size.width - 24) / 2
        let height  = (UIScreen.main.bounds.size.width * 200) / 320
        return CGSize(width: width, height: height)
    }
}

但是输出如下。

在此处输入图片说明

要求:第一个绿色单元格是全角,第二个黄色单元格不是来自中心,而是来自左侧,第三个,第四个单元格是2 * 2

任何帮助将不胜感激。

提前致谢。

为此,您应该在集合视图中使用3部分。

  1. 第1-1节
  2. 第2-1节(宽度应小于收集单元可用宽度的一半)
  3. 第3部分-您想要的单元格数

extension ViewController: UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout {

    func numberOfSections(in collectionView: UICollectionView) -> Int {
        return 3
    }

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return section == 2 ? 4 : 1
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
        return UIEdgeInsets(top: 10, left: 10, bottom: 10, right: 10)
    }

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        switch indexPath.section {
        case 0:
            return CGSize(width: UIScreen.main.bounds.width - 20, height: 200)
        case 1:
            return CGSize(width: (UIScreen.main.bounds.width - 30) / 2, height: 200)
        default:
            return CGSize(width: (UIScreen.main.bounds.width - 30) / 2, height: 200)
        }
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "collectioncell", for: indexPath)
        cell.backgroundColor = .red
        return cell
    }
}

您的视图如下所示:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM