Es ist zu spät, um diese Frage zu beantworten, aber ich habe dieses Problem kürzlich durchgearbeitet.
Die obige Antwort von @ lee hilft mir sehr, meine Antwort zu bekommen. Aber diese Antwort beschränkt sich auf Ziel-c und ich habe schnell gearbeitet .
@lee Erlauben Sie mir unter Bezugnahme auf Ihre Antwort, den schnellen Benutzer dieses Problem leicht lösen zu lassen. Befolgen Sie dazu bitte die folgenden Schritte:
Deklarieren Sie eine CGFloat
Variable im Deklarationsabschnitt:
var height : CGFloat!
An viewDidAppear
können Sie es bekommen durch:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Wenn Ihre reload
Daten dann eine neue Höhe mit neuen Daten berechnen müssen, können Sie diese möglicherweise abrufen, indem Sie Folgendes addObserver
abhören: Wenn Ihre CollectionView
Daten nach dem erneuten Laden fertig sind viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Fügen Sie dann die folgende Funktion hinzu, um eine neue Höhe zu erhalten, oder führen Sie nach dem erneuten collectionview
Laden etwas aus:
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
}
Und vergessen Sie nicht, den Beobachter zu entfernen:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Ich hoffe, dies wird Ihnen helfen, Ihr Problem schnell zu lösen.