Центрирование последней строки в UICollectionView - PullRequest
0 голосов
/ 06 мая 2018

У меня есть 7 ячеек UICollectionView, отображаемых как это

X X
X X
X X
X

Мне нужно, чтобы это отображалось так

X X
X X
X X
 X

Как это можно сделать в Swift?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Вы можете сделать этот простой расчет в вашей функции collectionViewLayout.

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

    //return itemSize
    let spaceBetweenCell :CGFloat = 0
    let screenWidth = UIScreen.main.bounds.size.width - CGFloat(2 * spaceBetweenCell)
    let totalSpace = spaceBetweenCell * 1.0
    if indexPath.row == categories.count-1 {
      // check if last cell is odd
      if categories.count % 2  == 1 {
        return CGSize(width: screenWidth , height: (screenWidth-totalSpace)/4) // all Width and  same previous height
      }else {
        return itemSize
      }
    }else{
      return itemSize
    }
  }
0 голосов
/ 06 мая 2018

Вот мой код, я просто добавляю количество источников данных к 7 элементам

Также убедитесь, что вы создали свою ячейку

 let cell = collectionView.dequeueReusableCell(withReuseIdentifier:
 "cell", for: indexPath) as! UICollectionViewCell

, расстояние между предметами = 4

код

extension ViewController :UICollectionViewDelegate , UICollectionViewDelegateFlowLayout,UICollectionViewDataSource{
     func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return 7 // data source
      }

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

          let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! UICollectionViewCell
           cell.backgroundColor = .red
          return cell
       }

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

        let spaceBetweenCell :CGFloat = 4.0
        let screenWidth = UIScreen.main.bounds.size.width - CGFloat(2 * spaceBetweenCell)
        let totalSpace = spaceBetweenCell * 1.0;  // there is one space in 2 item
        if indexPath.row == 6 { // indexpath.row  == datasource.count - 1
             if 6 % 2  == 1{  // check if last cell is odd
                return CGSize(width: screenWidth , height: (screenWidth-totalSpace)/2) // all Width and  same previous height
             }else{
                return CGSize(width: (screenWidth - totalSpace)/2, height: (screenWidth-totalSpace)/2)

            }
        }else{
            return CGSize(width: (screenWidth - totalSpace)/2, height: (screenWidth-totalSpace)/2)

        }

    }

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

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



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