Żadne z tych rozwiązań nie działało dla mnie. Oto, co zrobiłem ze Swift 4 i Xcode 10.1 ...
W viewDidLoad () zadeklaruj dynamiczną wysokość wiersza tabeli i utwórz poprawne ograniczenia w komórkach ...
tableView.rowHeight = UITableView.automaticDimension
Również w viewDidLoad () zarejestruj wszystkie końcówki komórek tableView w widoku tabeli w następujący sposób:
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")
W tableView heightForRowAt zwraca wysokość równą wysokości każdej komórki w 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
}
}
Teraz podaj szacowaną wysokość wiersza dla każdej komórki w tableView EstymatedHeightForRowAt. Bądź dokładny, jak potrafisz ...
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
}
}
To powinno działać...
Nie musiałem zapisywać i ustawiać contentOffset podczas wywoływania tableView.reloadData ()
reloadRowsAtIndexPaths
. Ale (2) co masz na myśli przez „skokowy” i (3) czy ustawiłeś szacowaną wysokość wiersza? (Próbuję tylko dowiedzieć się, czy istnieje lepsze rozwiązanie, które pozwoliłoby dynamicznie aktualizować tabelę.)