Es demasiado tarde para responder a esta pregunta, pero recientemente pasé por este problema.
La respuesta anterior de @ lee me ayudó mucho a obtener mi respuesta. Pero esa respuesta se limita a objetivo-c y estaba trabajando en rápido .
@lee Con referencia a su respuesta, permítame permitir que el usuario rápido resuelva este problema fácilmente. Para eso, siga los pasos a continuación:
Declare una CGFloat
variable en la sección de declaración:
var height : CGFloat!
En viewDidAppear
puedes conseguirlo por:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Tal vez cuando sus reload
datos necesiten calcular una nueva altura con nuevos datos, entonces puede obtenerlos: addObserver
para escuchar cuando haya CollectionView
terminado de recargar los datos en viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Luego agregue la función de abajo para obtener una nueva altura o haga cualquier cosa después de collectionview
terminar la recarga:
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
}
Y no olvide eliminar el observador:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Espero que esto le ayude a resolver su problema rápidamente.