Жодне з цих рішень не працювало на мене. Ось що я зробив із Swift 4 та Xcode 10.1 ...
У viewDidLoad () оголосити динамічну висоту рядка таблиці та створити правильні обмеження у клітинках ...
tableView.rowHeight = UITableView.automaticDimension
Також у viewDidLoad () зареєструйте всі вказівки комірок 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 оцінкуHeightForRowAt. Будьте точні, як зможете ...
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) що ви маєте на увазі під «стрибком» та (3), чи встановили ви орієнтовну висоту рядка? (Просто намагаюся розібратися, чи є краще рішення, яке б дозволило вам динамічно оновлювати таблицю.)