На це запитання відповісти пізно, але я нещодавно пережив це питання. Вищеназвана відповідь
@ lee дуже допомагає мені отримати відповідь. Але ця відповідь обмежена ціллю-c, і я працював швидко .
@lee Посилаючись на вашу відповідь, дозвольте дозволити швидкому користувачеві легко вирішити цю проблему. Для цього виконайте наступні кроки:
Оголосити CGFloat
змінну в розділі декларації:
var height : CGFloat!
У viewDidAppear
вас це можна отримати:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Можливо, коли вам reload
потрібні дані, то потрібно обчислити нову висоту з новими даними, тоді ви можете отримати їх: addObserver
прослухати, коли ваші CollectionView
завершені дані перезавантажте за адресою viewWillAppear
:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Потім додайте наступну функцію, щоб отримати нову висоту або зробити що-небудь після collectionview
закінченого перезавантаження:
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
}
І не забудьте зняти спостерігача:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Сподіваюся, це допоможе вам швидко вирішити свою проблему.