ไม่มีวิธีแก้ปัญหาเหล่านี้สำหรับฉัน นี่คือสิ่งที่ฉันทำกับSwift 4 & Xcode 10.1 ...
ใน viewDidLoad () ประกาศความสูงของแถวแบบไดนามิกของตารางและสร้างข้อ จำกัด ที่ถูกต้องในเซลล์ ...
tableView.rowHeight = UITableView.automaticDimension
รวมทั้งใน viewDidLoad () ให้ลงทะเบียน tableView cell nibs ทั้งหมดของคุณไปยัง tableview ดังนี้:
tableView.register(UINib(nibName: "YourTableViewCell", bundle: nil), forCellReuseIdentifier: "YourTableViewCell")
tableView.register(UINib(nibName: "YourSecondTableViewCell", bundle: nil), forCellReuseIdentifier: "YourSecondTableViewCell")
tableView.register(UINib(nibName: "YourThirdTableViewCell", bundle: nil), forCellReuseIdentifier: "YourThirdTableViewCell")
ใน tableView heightForRowAt ให้ส่งคืนความสูงเท่ากับความสูงของแต่ละเซลล์ที่ indexPath.row ...
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
let cell = Bundle.main.loadNibNamed("YourTableViewCell", owner: self, options: nil)?.first as! YourTableViewCell
return cell.layer.frame.height
} else if indexPath.row == 1 {
let cell = Bundle.main.loadNibNamed("YourSecondTableViewCell", owner: self, options: nil)?.first as! YourSecondTableViewCell
return cell.layer.frame.height
} else {
let cell = Bundle.main.loadNibNamed("YourThirdTableViewCell", owner: self, options: nil)?.first as! YourThirdTableViewCell
return cell.layer.frame.height
}
}
ทีนี้ให้ความสูงของแถวโดยประมาณสำหรับแต่ละเซลล์ใน tableView ที่ประเมินไว้โดยความสูงของพื้น แม่นยำในขณะที่คุณสามารถ ...
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
return 400 // or whatever YourTableViewCell's height is
} else if indexPath.row == 1 {
return 231 // or whatever YourSecondTableViewCell's height is
} else {
return 216 // or whatever YourThirdTableViewCell's height is
}
}
ที่ควรจะทำงาน ...
ฉันไม่จำเป็นต้องบันทึกและตั้งค่า contentOffset เมื่อเรียก tableView.reloadData ()
reloadRowsAtIndexPaths
ใช่แน่นอนคุณสามารถโหลดแถวบางอย่างที่ใช้ แต่ (2) คุณหมายถึงอะไรโดย "jumpy" และ (3) คุณตั้งค่าความสูงแถวโดยประมาณอย่างไร (เพียงแค่พยายามที่จะคิดออกว่ามีทางออกที่ดีกว่าที่จะช่วยให้คุณสามารถปรับปรุงตารางแบบไดนามิก.)