Comment modifier la taille des cellules UICollectionViewCell de manière programmatique dans Swift?

j'ai un UICollectionView avec un segmented control pour passer d'une donnée à l'autre. Mais comment puis-je changer le UICollectionViewCell taille des propriétés par programmation<!--5 ? ensuite, je peux personnaliser chaque style de façon appropriée pour chaque type de données.

Par exemple changer la largeur à 520 points et la hauteur à 100. Je suis nouveau sur le développement iOS et je suis connu avec les CSS :/

je sais comment le faire dans Xcode (évidemment) mais ne connaissent pas les méthodes correctes pour le changer en swift. Toutes les idées ou de la rétroaction est très apprécié (Y)

enter image description here

34
demandé sur RileyDev 2015-07-27 22:59:18

5 réponses

//Use for size
func collectionView(collectionView: UICollectionView,
        layout collectionViewLayout: UICollectionViewLayout,
        sizeForItemAtIndexPath indexPath: NSIndexPath) -> CGSize {

    }
//Use for interspacing
    func collectionView(collectionView: UICollectionView,
        layout collectionViewLayout: UICollectionViewLayout,
        minimumInteritemSpacingForSectionAtIndex section: Int) -> CGFloat {
            return 1.0
    }

    func collectionView(collectionView: UICollectionView, layout
        collectionViewLayout: UICollectionViewLayout,
        minimumLineSpacingForSectionAtIndex section: Int) -> CGFloat {
            return 1.0
    }

/ / pour swift 3

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

}

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

func collectionView(_ collectionView: UICollectionView, layout
    collectionViewLayout: UICollectionViewLayout,
                    minimumLineSpacingForSectionAt section: Int) -> CGFloat {
    return 1.0
}
68
répondu Sumit Oberoi 2017-05-22 06:01:58

Swift 3

Méthodes de @sumit-oberoi réponse ne sera pas appelé si vous utilisez Swift 3. Pour le faire fonctionner à faire de cette réglages:

  1. conforme à la UICollectionViewDelegateFlowLayout protocole.

  2. implémenter ces méthodes:

    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        sizeForItemAt indexPath: IndexPath) -> CGSize {
    
    }
    
    func collectionView(_ collectionView: UICollectionView,
                        layout collectionViewLayout: UICollectionViewLayout,
                        minimumInteritemSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }
    
    func collectionView(_ collectionView: UICollectionView, layout
        collectionViewLayout: UICollectionViewLayout,
                        minimumLineSpacingForSectionAt section: Int) -> CGFloat {
        return 1.0
    }
    

notez les changements:

  1. ajouter _ avant collectionView dans le nom de la méthode
  2. NSIndexPath changements IndexPath
55
répondu JPetric 2017-02-20 08:38:22

Swift 3

override func viewDidLoad() {
    super.viewDidLoad()

    let cellSize = CGSize(width:80 , height:80)

    let layout = UICollectionViewFlowLayout()
    layout.scrollDirection = .vertical //.horizontal
    layout.itemSize = cellSize
    layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
    layout.minimumLineSpacing = 1.0
    layout.minimumInteritemSpacing = 1.0
    myCollectionView.setCollectionViewLayout(layout, animated: true)

    myCollectionView.reloadData()
}
19
répondu Gaurav Rami 2017-04-03 11:29:22

si vous utilisez le code de Gaurav Rami ci-dessous

let cellSize = CGSize(width:80 , height:80)

let layout = UICollectionViewFlowLayout()
layout.scrollDirection = .vertical //.horizontal
layout.itemSize = cellSize
layout.sectionInset = UIEdgeInsets(top: 1, left: 1, bottom: 1, right: 1)
layout.minimumLineSpacing = 1.0
layout.minimumInteritemSpacing = 1.0
myCollectionView.setCollectionViewLayout(layout, animated: true)

et obtenir ce message "Instantanés de vue qui n'a pas été rendu vide instantané. Assurez-vous que votre vue a été rendue au moins une fois avant snapshot ou snapshot après les mises à jour à l'écran." vous devez supprimer animé lors de la mise en page de vue de collection pour la vue

myCollectionView.setCollectionViewLayout(layout, animated: false)

ensuite, le message disparaîtra

5
répondu Heo Đất Hades 2017-08-08 10:20:37
first Conform protocol the UICollectionViewDelegateFlowLayout

set width and height  UICollectionViewCell 

UIcollectionViewCell Hight = 300;
UIcollectionViewCell Width = 380;

    func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout,sizeForItemAt indexPath: IndexPath) -> CGSize {
      return CGSize(width: CGFloat((380)), height: CGFloat(300))
    }
-1
répondu Ananda Aiwale 2018-04-24 05:02:58