UIImageView renders the size of an image incorrectly. Using Scale Aspect Fit, if the UIImageView is a square the image is the correct aspect ratio with transparency in the areas the image does not fill.
//Image is Square & Correct Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 320))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
//Image is Rectangle & Incorrect Size
var imageView = UIImageView(frame: CGRectMake(0, 50, 320, 450))
imageView.clipsToBounds = true
imageView.contentMode = UIViewContentMode.ScaleAspectFit
The UIImageView needs to touch the edges and have transparent space at the top and bottom of the screen and the image inside needs to keep its original ratio rather than stretching taller. I have attached two images of how the image inside the UIImageView is rendering.
I was having the same issue, and what fixed it for me was making sure to set the imageView image after the content mode was set. ie:
Cheers
Swift 3 version of your code:
There is a great solution here: by olearyj234 .
and it helped me a lot. I suggest taking a look. Also, here is his code in swift 4 and Xcode 9.2:
That's the intended behaviour for
UIViewContentMode.ScaleAspectFit
. From the docs:It seems from what you describe that you need
UIViewContentMode.ScaleAspectFill
Swift 5
You can apply UIView.ContentMode.scaleAspectFit only for UIImageView like this:
I added an autoresizing mask to the UIImageView and it now displays the correct ratios.
This answer helped me: Captured photo is stretched with AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto as I was using an image that was taken through the phones camera.