现在回答这个问题为时已晚,但我最近经历了这个问题。
@lee上面的答案对我得到答案有很大帮助。但是这个答案仅限于Objective-c并且我正在swift中工作。
@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")
}
我希望这将帮助您迅速解决您的问题。