Исправить ячейки UICollectionView на экране динамически - PullRequest
2 голосов
/ 14 марта 2019

Я работаю над приложением TVOS, я хочу исправить все ячейки на экране телевизора без прокрутки по вертикали или горизонтали. Здесь количество клеток будет считаться динамическим, это главная проблема. Я хочу установить все ячейки, как это

Например: Если количество ячеек 4

enter image description here

Если количество ячеек 5

enter image description here

Если число ячеек 9

enter image description here

Если количество ячеек равно 11

enter image description here

Здесь необходимо динамически устанавливать высоту и ширину столбцов, строк и ячеек (прокрутка запрещена)

Мой код:

//Example array
var collectionViewArray:[UIColor] = [.brown, .red, .purple, .lightGray, .yellow, .black, .cyan, .magenta, .orange, .purple, .lightGray]

override func viewDidAppear(_ animated: Bool) {
    myCollectionView.delegate = self
    myCollectionView.dataSource = self

}

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

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! TVMenuCollectionViewCell
    cell.cellView.backgroundColor = collectionViewArray[indexPath.row]
 return cell
}

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

    let screenWidth = collectionView.bounds.width
    let screenHeight = collectionView.bounds.height
 return CGSize(width: (screenWidth-50)/4, height: (screenHeight-40)/3)
}

На самом деле, если ячеек больше, мне нужно N x (N-1) столбцов и строк.

1 Ответ

1 голос
/ 14 марта 2019

Рабочий код Swift 4

Вам необходимо использовать UICollectionViewDelegateFlowLayout такой метод

class CardListViewController:UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{

    // UICollectionViewDelegateFlowLayout Delegate method

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize
    {
        let screenWidth = collectionView.bounds.width
        let screenHeight = collectionView.bounds.height

        if 0 ... 4 ~= collectionViewArray.count{
           return CGSize(width: (screenWidth - 30) / 2, height: (screenHeight - 30) / 2)
        }else if 5 ... 9 ~= collectionViewArray.count{
            return CGSize(width: (screenWidth - 40) / 3, height: (screenHeight - 40) / 2)
        }else{
            return CGSize(width: (screenWidth - 50) / 4, height: (screenHeight - 50) / 2)
        }
    }
}

Из вставок раздела «Раскадровка» Как это.

enter image description here

Выход

enter image description here

...