Жодне з цих рішень не працювало на мене. Ось що я зробив із 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), чи встановили ви орієнтовну висоту рядка? (Просто намагаюся розібратися, чи є краще рішення, яке б дозволило вам динамічно оновлювати таблицю.)