@sash проверьте обновленный код.
похожие вопросы, но ни один из ответов не работал для меня. В динамической таблице я хочу отображать изображения, которые имеют разную высоту. Каждая ячейка имеетUIImageView
сcontentMode = .scaleAspectFit
таким образом, изображение хорошо принимает ширину стола и принимает высоту столько, сколько необходимо.
Контроллер табличного представления:
class TableTableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
tableView.estimatedRowHeight = 100
tableView.rowHeight = UITableViewAutomaticDimension
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 2
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: ImageTableViewCell.self), for: indexPath) as! ImageTableViewCell
let image = indexPath.row == 0 ? UIImage(named: "1.jpg")! : UIImage(named: "2.jpg")!
cell.customImageView.image = image
return cell
}
}
Результат:
Как вы можете видеть, что высота ячейки неверна (красный фон изображения сверху и снизу изображения). Я считаю, что это происходит потому, чтоintrinsicContentSize
вида изображения равен размеру изображения, поэтому высота ячейки вычисляется неправильно (режим содержимого не учитывается). Я попытался вычислить высоту изображения и добавить ограничение высоты для вида изображения:
cell.heightConstraint.constant = cell.frame.width * image.size.height / image.size.width
но это нарушает ограничения представления содержимого ячейки.
Проект можно скачатьздесь >>