이 질문에 답하기에는 너무 늦었지만 최근에이 문제를 겪었습니다.
@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")
}
이 정보가 문제를 신속하게 해결하는 데 도움이되기를 바랍니다.