この質問に答えるのは遅すぎますが、私は最近この問題を経験しました。
@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")
}
これが問題の迅速な解決に役立つことを願っています。