Il est trop tard pour répondre à cette question, mais je suis récemment passé par ce problème.
La réponse ci - dessus de @ lee m'aide beaucoup à obtenir ma réponse. Mais cette réponse se limite à l' objectif-c et je travaillais rapidement .
@lee En référence à votre réponse, permettez-moi de laisser l'utilisateur rapide résoudre ce problème facilement. Pour cela, veuillez suivre les étapes ci-dessous:
Déclarez une CGFloat
variable dans la section déclaration:
var height : CGFloat!
À viewDidAppear
vous pouvez l'obtenir par:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Peut-être que lorsque vous avez reload
besoin de calculer une nouvelle hauteur avec de nouvelles données, vous pouvez l'obtenir par: addObserver
pour écouter lorsque vos CollectionView
données de rechargement ont terminé à 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 une nouvelle hauteur ou faites quelque chose après le collectionview
rechargement 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 de supprimer 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 rapidement.