Nessuna di queste soluzioni ha funzionato per me. Ecco cosa ho fatto con Swift 4 e Xcode 10.1 ...
In viewDidLoad (), dichiara l'altezza della riga dinamica della tabella e crea vincoli corretti nelle celle ...
tableView.rowHeight = UITableView.automaticDimension
Sempre in viewDidLoad (), registra tutti i pennini delle celle di TableView in tableview in questo modo:
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")
In tableView heightForRowAt, restituisce l'altezza uguale all'altezza di ciascuna cella in 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
}
}
Ora fornisci un'altezza di riga stimata per ogni cella nella tabella Visualizza stimaHeightForRowAt. Sii preciso come puoi ...
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
}
}
Dovrebbe funzionare ...
Non ho avuto bisogno di salvare e impostare contentOffset quando ho chiamato tableView.reloadData ()
reloadRowsAtIndexPaths
. Ma (2) cosa intendi con "jumpy" e (3) hai impostato un'altezza di riga stimata? (Sto solo cercando di capire se esiste una soluzione migliore che ti consenta di aggiornare la tabella in modo dinamico.)