How to stop an image from stretching within a UIImageView?
Solution 1
You can use
self.imageView.contentMode = UIViewContentModeScaleAspectFit;
Swift 3:
imageView.contentMode = .scaleAspectFit
Or UIViewContentModeCenter
/ .center
, or any of the other modes described in the UIView documentation.
Solution 2
Setting clipsToBounds in combination with UIViewContentModeScaleAspectFit contentMode was what did the trick for me. Hope that helps someone!
imageView.clipsToBounds = YES;
imageView.contentMode = UIViewContentModeScaleAspectFit;
Solution 3
Use the contentMode
property. You probably want either UIViewContentModeScaleAspectFit
or UIViewContentModeCenter
.
Solution 4
Change the UIImage's Mode from 'scale to fill' to 'Center' within the interface builder. Make sure your image is the exact size you need.
Solution 5
You have to set CGSize as your image width and hight so image will not stretch and it will arrange at the middle of imageview.
- (UIImage *)imageWithImage:(UIImage *)image scaledToFillSize:(CGSize)size
{
CGFloat scale = MAX(size.width/image.size.width, size.height/image.size.height);
CGFloat width = image.size.width * scale;
CGFloat height = image.size.height * scale;
CGRect imageRect = CGRectMake((size.width - width)/2.0f,
(size.height - height)/2.0f,
width,
height);
UIGraphicsBeginImageContextWithOptions(size, NO, 0);
[image drawInRect:imageRect];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
R. Dewi
Updated on May 18, 2020Comments
-
R. Dewi about 4 years
I have a
UIImageView
where I have set the frame size tox = 0, y = 0, width = 404, height = 712
. In my project, I need to change the image inUIImageView
dynamically.I am using this code to change the image:
self.imageView.image = [UIImage imageNamed:@"setting-image.png"];
The problem is, when the
*.png
image size is smaller than theUIImageView
frame size, the image stretches. I don't want it to stretch. Is there any way to do that? -
R. Dewi almost 13 yearsthank you for your answer, but using mode aspect fit make some image's position too below, so i change it into top left mode, thank you for suggesting me to using it, finally, i've got the answer :)
-
Achintya Ashok almost 7 years"clipsToBounds" checkmarked & "contentMode" as "AspectFill" on the Storyboard worked for me in Xcode 8