2016-10-29 5 views
1

Итак, у меня есть UIImageView, который называется imgView. В принципе пользователь может добавить свои собственные изображения в это представление и снова сохранить его в своей галерее.Изменить размер UIImageView для соответствия различным UIImages

Поскольку я не знаю заранее, какими размерами изображения от пользователя являются imgView, каждый раз нужно менять его размер, чтобы идеально подогнать изображение с помощью aspectFit. Если изображение мало imgView сжимается, так что не занимает много места и т.д.

Я использовал этот код в моем viewDidLoad достичь его, но он ничего не делает:

imgView.frame.size.width = imgView.image?.size.width 
imgView.frame.size.height = imgView.image?.size.height 

или

imgView.bounds.size = imgView.image?.size 

Что мне делать по-другому?

Edit для ответа alexburtnik в:

Это мой код прямо сейчас:

В тренажере:

enter image description here

Я изменил фон в моем Изображение Вид на зеленый. Так что сейчас он заполняет весь экран, но его вид не должен быть больше самого изображения.

+0

Вы используете autolayout? – alexburtnik

+0

Вы пытались установить ширину и высоту изображения как ширину и высоту изображения перед добавлением изображения в изображение? – DevB2F

+0

Ваш комментарий еще не загружен. Можете ли вы попробовать ввести свой код в viewDidAppear. –

ответ

1

Обновления ограничений ширины & высоту:

Я предполагаю, что вы используете autolayout. Если это так, вы должны изменить значения ограничений constant вместо установки кадров вручную. Вот пример:

class ImageViewController: UIViewController { 

    @IBOutlet weak var imageView: UIImageView!  
    @IBOutlet weak var heightConstraint: NSLayoutConstraint! 
    @IBOutlet weak var widthConstraint: NSLayoutConstraint! 

    func setImage(image: UIImage) { 
     imageView.image = image 
     let screenSize = UIScreen.main.bounds.size 

     let imageAspectRatio = image.size.width/image.size.height 
     let screenAspectRatio = screenSize.width/screenSize.height 

     if imageAspectRatio > screenAspectRatio { 
      widthConstraint.constant = min(image.size.width, screenSize.width) 
      heightConstraint.constant = widthConstraint.constant/imageAspectRatio 
     } 
     else { 
      heightConstraint.constant = min(image.size.height, screenSize.height) 
      widthConstraint.constant = heightConstraint.constant * imageAspectRatio 
     } 
     view.layoutIfNeeded() 
    }   
} 

Обратите внимание, что вы также должны тянуть выходы для width и height ограничений от раскадровки к вашему viewController

Другое решение без изменения размера UIImageView:

Если другой интерфейс элементы не полагаются на кадр UIImageView, и единственное, что вам нужно, - это внешний вид изображения, вы можете просто установить режим содержимого на Center или Top/Bottom/Right/Left и т.д.:

enter image description here

Просто установите фон UIImageView, чтобы чистый цвет

+0

@ R3ptor Решила ли ваша проблема? – alexburtnik

+0

Теперь, к сожалению, я просто обновил свой пост. Прямо сейчас ImageView заполняет весь экран. Но, как я уже сказал, он должен быть того же размера, что и изображение внутри. – R3ptor

+1

@ R3ptor Обновленная функция работает так, как ожидалось. Я дам вам знать, если я придумаю более элегантное решение. – alexburtnik

-2

Просто установите режим UIImageView контента для Уместить

Scale To Fit