Jest za późno, aby odpowiedzieć na to pytanie, ale ostatnio omawiałem ten problem. Powyższa odpowiedź
@ lee bardzo mi pomogła w uzyskaniu odpowiedzi. Ale ta odpowiedź ogranicza się do celu-c i pracowałem szybko .
@lee W nawiązaniu do Twojej odpowiedzi, pozwól mi pozwolić szybkiemu użytkownikowi na łatwe rozwiązanie tego problemu. W tym celu wykonaj poniższe czynności:
Zadeklaruj CGFloat
zmienną w sekcji deklaracji:
var height : CGFloat!
Co viewDidAppear
można je dostać przez:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Może kiedy reload
dane będą musiały obliczyć nową wysokość przy użyciu nowych danych, można to uzyskać w następujący sposób: addObserver
aby nasłuchiwać, kiedy CollectionView
zakończyliśmy ponowne ładowanie danych o viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Następnie dodaj poniżej funkcję, aby uzyskać nową wysokość lub zrób cokolwiek po collectionview
zakończeniu przeładowania:
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
}
I nie zapomnij usunąć obserwatora:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Mam nadzieję, że pomoże to w szybkim rozwiązaniu problemu.