Я хочу, чтобы UIImageView
заполнял контейнер как можно больше, но изображение внутри него должно сохранять соотношение сторон, и контейнер должен соответствовать размеру изображения внутри него.
Воткартина того, как это сейчас, когда это не будет работать:
https://imgur.com/a/S9WSHmc
Я решил проблему, но только при первой загрузке вида, когда я меняю изображениеimageView становится все меньше и меньше.
Я решил это с помощью этого расширения:
https://www.hackingwithswift.com/example-code/uikit/how-to-find-an-aspect-fit-images-size-inside-an-image-view
Так что, получая UIImage
, я вызываю метод макета для макетамои UIViews, затем я настроил изображение внутри UIImageView.Затем в методе рисования родительского UIView я вычисляю contentClippingRect
для UIImageView
, а затем устанавливаю ограничения UIImageView
в contentClippingRect
и снова размечаю.
Сбрасывает метод My Layoutограничения UIImageView
на ограничения всего контейнера, когда в imageView нет изображения.
Но, как уже говорилось, когда я меняю изображение, оно не будет работать, и у меня возникают проблемы с ограничениями, когдаизменение изображения.
Вот что я попробовал:
var image: UIImage? {
didSet {
photoView.image = nil
layout()
photoView.image = image
}
}
override func draw(_ rect: CGRect) {
if photoView.image != nil {
setPictureFrame()
layout()
}
}
private func setPictureFrame() {
let photoRect = photoView.contentClippingRect
photoView.clearConstraints()
photoView.heightAnchor.constraint(equalToConstant: photoRect.height).isActive = true
photoView.widthAnchor.constraint(equalToConstant: photoRect.width).isActive = true
}
private func layout() {
var layoutConstraints: [NSLayoutConstraint] = []
if photoView.image == nil {
photoView.clearConstraints()
photoView.constraintsFillWhole(view: photoViewContainer)
}
layoutConstraints += [
photoView.centerXAnchor.constraint(equalTo: self.centerXAnchor),
photoView.centerYAnchor.constraint(equalTo: photoViewContainer.centerYAnchor),
]
NSLayoutConstraint.activate(layoutConstraints)
}
Большое спасибо за вашу помощь!