Bu soruyu cevaplamak için çok geç ama son zamanlarda bu konuyu ele aldım.
@ lee'in yukarıdaki cevabı cevabımı almam için bana çok yardımcı oluyor. Ama bu cevap objektif-c ile sınırlı ve ben hızlı çalışıyordum .
@lee Cevabınıza referansla, hızlı kullanıcının bu sorunu kolayca çözmesine izin vermeme izin verin. Bunun için lütfen aşağıdaki adımları izleyin:
CGFloat
Bildirim bölümünde bir değişken bildirin:
var height : CGFloat!
Şuradan viewDidAppear
alabilirsiniz:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Eğer Belki reload
: veriler daha sonra yeni verilerle yeni bir yükseklik hesaplamak gerekir o zaman bunu elde edebilirsiniz addObserver
zaman sizi dinlemesini CollectionView
bitmiş yeniden verilerini de viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Ardından, yeni yükseklik elde etmek veya collectionview
yeniden yüklemeyi bitirdikten sonra herhangi bir şey yapmak için aşağıdaki işlevi ekleyin :
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
}
Ve gözlemciyi kaldırmayı unutmayın:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Umarım bu, sorununuzu hızlı bir şekilde çözmenize yardımcı olur.