UICollectionview имеет нежелательное пространство между разделами - PullRequest
0 голосов
/ 05 мая 2020

Я установил разделы для моего горизонтального UICollectionView. Я хочу, чтобы моя ячейка во вторых строках в каждом разделе была двойной ширины элементов в первой строке. Вот что я установил:

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

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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { //1.7, 2.7
    if indexPath.row == 0 {
        return CGSize(width: collectionView.frame.size.width/2,
        height: collectionView.frame.size.height/2)
    }
    return CGSize(width: collectionView.frame.size.width,
                  height: collectionView.frame.size.height/2)

}

Но вот конечный результат:

enter image description here

Как избавиться от пробелов в предметах меньшего размера и красиво их расположить?

Примечание: Числа на рисунках представляют собой раздел и строку (0 1 -> Раздел 0, строка 1)

Это то, чего я хочу достичь:

enter image description here

Ответы [ 3 ]

1 голос
/ 05 мая 2020

Во-первых: если вы используете раскадровку, убедитесь, что вы правильно добавили ограничения представления коллекции в ее супер-представление.

Второе: добавьте ограничения ячейки представления коллекции.

Третье: из инспектора размеров раскадровки , измените оценочный размер представления коллекции на none.

Четвертый: Добавьте UICollectionViewDelegateFlowLayout в ваш контроллер представления

Пятый: Добавьте следующий код:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if indexPath.section == 0 {
        return CGSize(width: (collectionView.frame.size.width - 10)/2,
        height: (collectionView.frame.size.height - 10)/2) // your desired height
    }
    return CGSize(width: (collectionView.frame.size.width - 10),
                  height: (collectionView.frame.size.height - 10)/2)
}

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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 0.0
}

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
            return 5
}
0 голосов
/ 05 мая 2020

Заменить indexPath.row на indexPath.section.

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { //1.7, 2.7
    if indexPath.section == 0 {
        return CGSize(width: collectionView.frame.size.width/2,
        height: collectionView.frame.size.height/2)
    }
    return CGSize(width: collectionView.frame.size.width,
                  height: collectionView.frame.size.height/2)

}




0 голосов
/ 05 мая 2020

Вы можете использовать эту функцию:

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

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
    return 5
}

Надеюсь, это поможет ...

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