É tarde demais para responder a essa pergunta, mas recentemente resolvi esse problema.
A resposta de @ Lee acima me ajudou muito a obter minha resposta. Mas essa resposta é limitada ao objetivo-c e eu estava trabalhando rapidamente .
@lee Com referência à sua resposta, permita-me deixar o rápido usuário resolver esse problema facilmente. Para isso, siga os passos abaixo:
Declare uma CGFloatvariável na seção de declaração:
var height : CGFloat!
Em viewDidAppearvocê pode obtê-lo por:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Talvez quando seus reloaddados precisarem calcular uma nova altura com novos dados, você pode obtê-los: addObserverpara ouvir quando seus CollectionViewdados de recarregamento terminados em viewWillAppear:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(true)
....
....
self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil)
}
Em seguida, adicione a função abaixo para obter uma nova altura ou faça qualquer coisa após collectionviewterminar a recarga:
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
}
E não se esqueça de remover o observador:
override func viewWillDisappear(animated: Bool) {
super.viewWillDisappear(true)
....
....
self.myCollectionView.removeObserver(self, forKeyPath: "contentSize")
}
Espero que isso ajude você a resolver seu problema rapidamente.