Как установить пользовательскую коллекцию View Cell Frame? - PullRequest
0 голосов
/ 21 сентября 2018

Я хочу сначала 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)
    }
}

Но выводприводится ниже.

enter image description here

Требование: первая зеленая ячейка имеет полную ширину, а вторая желтая ячейка идет не от центра, а слевасторона и 3-й, 4-й и т. д. ячейка приходит 2 * 2

Любая помощь будет оценена.

Заранее спасибо.

1 Ответ

0 голосов
/ 21 сентября 2018

Для этого вам нужно взять 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
    }
}

Ваш взгляд будет выглядеть так:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...