Удаление верхнего/нижнего заполнения из UIImageView

У меня есть пользовательский UITableViewCell с UIImageView. Я извлекаю изображения из Интернета, чтобы заполнить представление изображения в ячейках, поэтому соотношение сторон может быть разным для каждого изображения. Я хотел бы избежать верхнего/нижнего заполнения в UIImageView, когда ширина изображения больше его высоты.

IE: введите здесь описание изображения

Я также хочу сохранить соотношение сторон таким же. У меня есть пользовательская ячейка представления таблицы, расположенная в виде 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.

Пара вещей:

  1. Я не уверен, почему ширина/высота UIImageViews составляет 1000/1000, это кажется очень странным. Либо переработка ячеек, либо установка ограничения по высоте позже испортила размер.

  2. То, что я пытаюсь сделать, в порядке, то есть это действительное решение? Если нет, есть ли хороший способ изменить размер высоты UIImageView в зависимости от соотношения сторон изображения, учитывая, что я использую UITableView с автоматическим макетом и автоматической высотой.


person lostintranslation    schedule 10.10.2016    source источник
comment
Нашли решения?   -  person Cerlin    schedule 29.08.2017
comment
d= (-_- ) То же самое, не сдаваться!   -  person Top-Master    schedule 05.04.2021


Ответы (1)


В моем случае мы использовали что-то вроде ограничения Height >= 123, и изменив его на «равно» (вместо «больше чем»), мы удалили неожиданное заполнение.

person Top-Master    schedule 05.04.2021