Слишком поздно отвечать на этот вопрос, но я недавно столкнулся с этой проблемой. Ответ
@ lee выше очень помог мне получить ответ. Но этот ответ ограничен objective-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")
}
Надеюсь, это поможет вам быстро решить вашу проблему.