Nenhuma dessas soluções funcionou para mim. Aqui está o que eu fiz com o Swift 4 & Xcode 10.1 ...
Em viewDidLoad (), declare a altura da linha dinâmica da tabela e crie restrições corretas nas células ...
tableView.rowHeight = UITableView.automaticDimension
Também em viewDidLoad (), registre todas as pontas de suas células tableView na visualização de tabela como esta:
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")
Em tableView heightForRowAt, retorne a altura igual à altura de cada célula em 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
}
}
Agora forneça uma altura de linha estimada para cada célula em tableView estimadoHeightForRowAt. Seja o mais preciso possível ...
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
}
}
Isso deve funcionar ...
Não precisei salvar e definir contentOffset ao chamar tableView.reloadData ()
reloadRowsAtIndexPaths
. Mas (2) o que você quer dizer com "nervoso" e (3) você definiu uma altura estimada de linha? (Apenas tentando descobrir se há uma solução melhor que permitiria que você atualizar a tabela dinâmica.)