J'ai une vue de collection qui forme une grille de 15 x 15. Je veux définir sa hauteur et sa largeur à 0,5 (ou un multiple) de la hauteur de vue dans laquelle elle est contenue. J'ai fait cela dans le storyboard et j'ai défini le rapport hauteur / largeur sur 1: 1.

enter image description here

Mon problème est que lorsque je fais pivoter l'écran en mode paysage, la grille n'est plus de 15 x 15.

enter image description here

Je peux définir la hauteur directement dans le storyboard, par exemple 300 x 300, mais j'ai ensuite rencontré des problèmes pour l'adapter à différents appareils.

0
Steve Harris 1 août 2017 à 15:00

2 réponses

Vous pouvez ajouter une contrainte de largeur et de hauteur égales à votre vue de collection par rapport à la vue de surveillance dans laquelle elle se trouve. Et puis modifiez le multiplicateur de contraintes à 0,5 comme indiqué dans l'image ci-dessous - entrez la description de l'image ici

0
Abhishek Jain 1 août 2017 à 12:08

Essaye ça

extension MYViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width/15, height: collectionView.frame.height/15)
    }
}

Ajoutez aussi ces lignes

override func viewWillLayoutSubviews() {
        guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
            super.viewWillLayoutSubviews()
            return
        }
        flowLayout.invalidateLayout()
        super.viewWillLayoutSubviews()
    }
0
Berlin Raj 1 août 2017 à 18:19