สายเกินไปที่จะตอบคำถามนี้ แต่เมื่อเร็ว ๆ นี้ฉันได้แก้ไขปัญหานี้แล้ว คำตอบข้างต้น
ของ @ lee ช่วยฉันได้มากในการรับคำตอบ แต่คำตอบที่ถูก จำกัด ไว้ที่วัตถุประสงค์ -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")
}
ฉันหวังว่านี่จะช่วยให้คุณแก้ปัญหาได้อย่างรวดเร็ว