Ни одно из этих решений не помогло мне. Вот что я сделал с Swift 4 и Xcode 10.1 ...
В viewDidLoad () объявите динамическую высоту строки таблицы и создайте правильные ограничения в ячейках ...
tableView.rowHeight = UITableView.automaticDimension
Также в viewDidLoad () зарегистрируйте все перья ячеек tableView в 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 EstimatedHeightForRowAt. Будьте точны, как можете ...
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
if indexPath.row == 0 {
return 400
} else if indexPath.row == 1 {
return 231
} else {
return 216
}
}
Это должно сработать ...
Мне не нужно было сохранять и устанавливать contentOffset при вызове tableView.reloadData ()
reloadRowsAtIndexPaths
. Но (2) что вы подразумеваете под «нервным» и (3) вы установили примерную высоту строки? (Просто пытаюсь выяснить, есть ли лучшее решение, которое позволило бы вам динамически обновлять таблицу.)