Sudah terlambat untuk menjawab pertanyaan ini tetapi saya baru saja membahas masalah ini.
@ lee jawaban di atas banyak membantu saya untuk mendapatkan jawaban saya. Tetapi jawaban itu terbatas pada tujuan-c dan saya bekerja dengan cepat .
@lee Dengan mengacu pada jawaban Anda, izinkan saya untuk membiarkan pengguna cepat menyelesaikan masalah ini dengan mudah. Untuk itu, ikuti langkah-langkah di bawah ini:
Deklarasikan CGFloat
variabel di bagian deklarasi:
var height : CGFloat!
Di viewDidAppear
Anda bisa mendapatkannya dengan:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Mungkin ketika Anda reload
data kemudian perlu menghitung ketinggian baru dengan data baru maka Anda bisa mendapatkannya dengan cara: addObserver
untuk mendengarkan ketika Anda CollectionView
selesai memuat ulang data di viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Kemudian tambahkan fungsi di bawah untuk mendapatkan ketinggian baru atau melakukan apapun setelah collectionview
selesai memuat ulang:
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
}
Dan jangan lupa untuk menghapus pengamat:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Saya harap ini akan membantu Anda menyelesaikan masalah Anda dengan cepat.