È troppo tardi per rispondere a questa domanda, ma di recente ho affrontato questo problema.
La risposta di @lee sopra mi ha aiutato molto a ottenere la mia risposta. Ma quella risposta è limitata all'obiettivo-c e stavo lavorando in modo rapido .
@lee Con riferimento alla tua risposta, permettimi di consentire all'utente rapido di risolvere facilmente questo problema. Per questo, segui i passaggi seguenti:
Dichiarare una CGFloat
variabile nella sezione dichiarazione:
var height : CGFloat!
A viewDidAppear
puoi ottenerlo:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Forse quando i reload
dati devono quindi calcolare una nuova altezza con nuovi dati, puoi ottenerla: addObserver
per ascoltare quando hai CollectionView
finito di ricaricare i dati su viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Quindi aggiungi la funzione di seguito per ottenere una nuova altezza o fare qualsiasi cosa al collectionview
termine della ricarica:
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
}
E non dimenticare di rimuovere l'osservatore:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Spero che questo ti aiuti a risolvere rapidamente il tuo problema.