É 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 CGFloat
variável na seção de declaração:
var height : CGFloat!
Em viewDidAppear
você pode obtê-lo por:
height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height
Talvez quando seus reload
dados precisarem calcular uma nova altura com novos dados, você pode obtê-los: addObserver
para ouvir quando seus CollectionView
dados 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 collectionview
terminar 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.