Dans le contrôleur de vue, si vous utilisez story-board, connectez UICollectionviewFlowLayout
(collectionViewFlowLayout
dans mon exemple) en utilisant IBOutlet, vue contrainte de largeur de collection (collectionViewWidth
dans mon exemple) IBOutlet et UICollectionView
comme IBOutlet (collectionView
dans mon exemple) . Vous pouvez modifier le cadre de la vue de la collecte et les cellules simultanément avec les éléments suivants:
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5, execute: {
self.width = 400
self.height = 400
self.collectionView.performBatchUpdates({
self.collectionViewFlowLayout.invalidateLayout()
self.collectionView.setCollectionViewLayout(self.collectionViewFlowLayout, animated: true)
}, completion: { _ in })
})
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5, execute: {
self.collectionViewWidth.constant = 50
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseOut,
animations: self.view.layoutIfNeeded, completion: nil)
})
Vous devez déclarer width
et height
var comme propriétés de classe avec une valeur initiale de 100 par exemple. Ceci est ensuite changé dans le code ci-dessus. Cela est rendu possible grâce à la mise en œuvre ci-dessous. Notez que vous devez adopter le protocole UICollectionViewDelegateFlowLayout
.
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
return CGSize(width: width, height: height)
}
Merci pour votre aide mais j'ai un problème maintenant j'ai un mauvais effet quand les animations commencent. L'image à l'intérieur des cellules s'élargit et se rétrécit. –
@ jimmy-gonçalves pouvez-vous fournir plus d'informations sur la façon dont vous construisez des cellules? comment la taille de la cellule change? –
Je mets mon code actuel pour vous montrer, ma cellule est réellement définie avec la méthode dans UICollectionFlowLayout qui est la taille de l'élément à. –