J'ai une vue de collection avec 6 éléments qui doivent être disposés en 3 rangées et 2 colonnes. J'utilise le code suivant pour y arriver:
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
let totalWidth = collectionView.bounds.size.width - 12
let totalHeight = collectionView.bounds.size.height - 18
let heightOfView = (totalHeight / 3)
let dimensions = CGFloat(Int(totalWidth))
return CGSize(width: dimensions / 2, height: heightOfView)
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return 6
}
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
return UIEdgeInsetsMake(0, 5, 0, 5)
}
Dans viewDidLoad:
override func viewDidLoad() {
super.viewDidLoad()
collectionView.dataSource = self
collectionView.delegate = self
flowLayout.scrollDirection = .horizontal
flowLayout.minimumLineSpacing = 5
flowLayout.minimumInteritemSpacing = 5
Cela produit une vue de collection qui ressemble à ceci, ce qui est parfait:
Cependant, lorsque je cache une vue situationnellement en dessous de la vue de collection avant que la vue ne soit chargée et que j'en ajuste la taille (en la rendant 50 points plus haute en hauteur), la sortie change pour ressembler à ce qui suit (voir l'image) avec les cellules 4 et 5 hors de l'écran sauf si elles sont défilées, seulement 2 rangées au lieu de 3 et un grand espace entre les rangées:
Apparence de la vue de collection lorsqu'elle est ajustée pour tenir compte de la vue cachée
Pour cacher situationnellement la vue dans viewWillAppear, j'ai ajouté ce qui suit:
override func viewWillAppear(_ animated: Bool) {
if testVariable == true {
bottomView.isHidden = true
// rend la hauteur de bottomView = 0
bottomViewHeight.constant = 0
// rend l'espace de la vue collection vers le bas du contrôleur de vue 0
collectionToBase.constant = 0
view.layoutIfNeeded()
}
}
Ce code teste si la variable testVariable est vraie et, si c'est le cas, masque le bottomView et agrandit la collectionView de 50 points pour remplir l'espace. J'ai ajouté ce code dans viewWillAppear dans l'espoir que collectionViewLayout tiendrait compte des 50 points de hauteur supplémentaires et s'ajusterait en conséquence, mais ce n'est pas le cas.