Как установить размер ячейки каждого коллекционного вида в одном коллекционном представлении, используя раскадровку и swfit? - PullRequest
0 голосов
/ 11 марта 2020

У меня есть один collectionView в viewController, и в этом collectionView у меня есть две ячейки collectionView, и у каждого есть свой собственный идентификатор и размер ячейки.

Что я собираюсь делать, когда пользователь нажимает кнопку CardView затем collectionView отобразит элементы ячейки с идентификатором «CardCell» размером 300x400.

И если пользователь коснется ListView, он отобразит элементы ячейки с идентификатором «ListCell» размером 300x100.

В настоящее время я определяю, какую ячейку отображать, я создал enum и переменную cellIndex.

enum CellIndexType: Int {
    case cardView
    case listView
}
var cellIndex = 0

, и если cellIndex равен 0, то v c отобразит «CardCell», а если 1, отобразится «ListCell».

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

    var cell = Cell()

    if cellIndex == CellIndexType.cardView.rawValue {
        if let reusableCell = collectionView.dequeueReusableCell(withReuseIdentifier: "CardCell", for: indexPath) as? Cell {
            cell = reusableCell
        }
    } else {
        if let reusableCell = collectionView.dequeueReusableCell(withReuseIdentifier: "ListCardCell", for: indexPath) as? Cell {
            cell = reusableCell
        }
    }
    return cell
}

Вот мой viewController с двумя ячейками в одном CollectionView.

enter image description here

Вот как выглядит мой viewController.

enter image description here

Вот как collectionView Инспектор атрибутов и инспектор размеров выглядят как.

* 1 037 *

enter image description here enter image description here

Но с моими конфигурациями в раскадровке и коде всегда отображаются ячейки размером 300x400.

Каким образом я могу реализовать эту логику c?

1 Ответ

1 голос
/ 11 марта 2020

Во-первых, вы должны установить нулевой размер ячейки collectionView на раскадровке.

enter image description here

Во-вторых, использовать collectionView's sizeForItemAt fun c:

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
    if self.cellIndex == 0{
        return CGSize(width: 300, height: 400)
    } else if self.cellIndex == 1{
        return CGSize(width: 300, height: 100)
    }
}

Кроме того, зарегистрируйте свои ячейки на viewDidLoad:

yourCollectionView.delegate = self
yourCollectionView.dataSource = self
yourCollectionView.register(UINib(nibName: "CardCell", bundle: nil), forCellWithReuseIdentifier: "CardCell")
yourCollectionView.register(UINib(nibName: "ListCell", bundle: nil), forCellWithReuseIdentifier: "ListCell")
yourCollectionView.reloadData()

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

...