У меня есть UITableViewCell
, у которого есть UIImageView
. Пользователи могут публиковать изображения, и они будут отображаться в UITableView
(похоже на приложения для социальных сетей / медиа).
Проблема, с которой я столкнулся, заключается в том, что после того, как я создаю свое сообщение и возвращаюсь к основному UITableView
, размер ячейки не изменяется соответственно. Но после того, как я прокручиваю, и ячейка выключается, она обновляется до нужного размера.
Поскольку я обрезаю изображения, и они могут быть портретными или альбомными, я рассчитываю соотношение изображений, если они не превышают определенного размера, тогда я устанавливаю постоянную ограничения равной установленному размеру.
Вот код, чтобы увидеть, что я пытаюсь сделать:
override func viewDidLoad() {
self.myTableView.rowHeight = UITableView.automaticDimension
self.myTableView.estimatedRowHeight = 500
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.myTableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
cell.myImageView.sd_setImage(with: imageRef, placeholderImage: nil) { (downloadedImage, error, cache, url) in
if let image = downloadedImage as? UIImage {
let ratio = image.size.width / image.size.height
var newHeight = cell.myImageView.frame.width / ratio
if newHeight >= tableView.frame.width {
newHeight = tableView.frame.width
} else {
newHeight = cell.myImageView.frame.width / ratio
}
cell.myImageHeightConstraint.constant = newHeight
if let indexPath = tableView.indexPath(for: cell) {
tableView.reloadRows(at: [indexPath], with: .none)
}
}
}
}
Обновление:
Мне кажется, что я все ближе, но у меня все еще есть проблемы. Выше я изменил код. Так что сейчас, когда я делаю свой новый пост и таблица перезагружается, ячейка изменяет размеры с небольшой анимацией. Все в порядке. Желательно, чтобы пользователь НЕ видел, как ячейка анимируется до нужного размера. Следующая проблема, когда я прокручиваю некоторые ячейки, возможно, потребуется изменить размер, и это вызывает некоторую нервозность.