У меня есть пользовательский UITableViewCell
с UIImageView
. Я извлекаю изображения из Интернета, чтобы заполнить представление изображения в ячейках, поэтому соотношение сторон может быть разным для каждого изображения. Я хотел бы избежать верхнего/нижнего заполнения в UIImageView
, когда ширина изображения больше его высоты.
Я также хочу сохранить соотношение сторон таким же. У меня есть пользовательская ячейка представления таблицы, расположенная в виде storyboard
с ограничениями, прикрепляющими сторону к каждому полю, а также верх и низ. У меня также есть ограничение на высоту UIImageView. Затем я пытаюсь изменить это ограничение по высоте в зависимости от соотношения сторон исходного изображения.
import UIKit
import Kingfisher
import AVFoundation
class MyTableViewCell: UITableViewCell {
@IBOutlet weak var image: UIImageView!
@IBOutlet weak var imageHeightConstraint: NSLayoutConstraint!
func populateCell(url: URL?) {
if let imageUrl = url {
if let url = URL(string: imageUrl) {
image.kf.setImage(with: url, placeholder: UIImage(named: "placeholder"), options: [], progressBlock: nil, completionHandler: { (theImage, error, cacheType, url) in
if let theImage = theImage {
let rect = AVMakeRect(aspectRatio: theImage.size, insideRect: CGRect(x: 0, y: 0, width: self.image.frame.width, height: 250))
self.imageHeightConstraint.constant = floor(rect.height)
}
})
}
}
}
}
Это прекрасно работает с первого раза. Я получаю исходное изображение, определяю его соотношение сторон на основе ширины/высоты UIImageViews. Однако, если я прокручиваю вниз и возвращаюсь к моему первому изображению, все становится шатким. Первоначально кадр UIImageViews имеет размер size: (343.0, 250.0), однако во второй раз кадр UIImageViews имеет размер 1000/1000.
Пара вещей:
Я не уверен, почему ширина/высота UIImageViews составляет 1000/1000, это кажется очень странным. Либо переработка ячеек, либо установка ограничения по высоте позже испортила размер.
То, что я пытаюсь сделать, в порядке, то есть это действительное решение? Если нет, есть ли хороший способ изменить размер высоты
UIImageView
в зависимости от соотношения сторон изображения, учитывая, что я используюUITableView
с автоматическим макетом и автоматической высотой.