Il est trop tard pour répondre à cette question, mais j'ai récemment été confronté à ce problème.
@lee's réponse ci-dessus aidez-moi beaucoup à obtenir ma réponse. Mais cette réponse est limitée à objectif-c et je travaillais dans rapide .
En référence à votre réponse, permettez-moi de permettre à l'utilisateur de Swift de résoudre ce problème facilement. Pour cela, veuillez suivre les étapes ci-dessous :
Déclarer un CGFloat
dans la section de déclaration :
var height : CGFloat!
Sur viewDidAppear
vous pouvez l'obtenir par :
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Peut-être que lorsque vous reload
données, vous devez alors calculer une nouvelle hauteur avec de nouvelles données, vous pouvez l'obtenir par : addObserver
pour écouter quand votre CollectionView
fini de recharger les données à viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Ensuite, ajoutez la fonction ci-dessous pour obtenir la nouvelle hauteur ou pour faire quoi que ce soit après. collectionview
Le rechargement est terminé :
override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
let newHeight : CGFloat = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
var frame : CGRect! = self.myCollectionView.frame
frame.size.height = newHeight
self.myCollectionView.frame = frame
}
Et n'oubliez pas d'enlever l'observateur :
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
J'espère que cela vous aidera à résoudre votre problème dans swift.