UIImageView aspect fit and center

前端 未结 10 936
执笔经年
执笔经年 2020-12-07 09:48

I have an image view, declared programmatically, and I am setting its image, also programmatically.

However, I find myself unable to set the image to both fit the as

相关标签:
10条回答
  • 2020-12-07 10:20
    [your_imageview setContentMode:UIViewContentModeCenter];
    
    0 讨论(0)
  • 2020-12-07 10:22

    For people looking for UIImage resizing,

    @implementation UIImage (Resize)
    
    - (UIImage *)scaledToSize:(CGSize)size
    {
        UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
        [self drawInRect:CGRectMake(0.0f, 0.0f, size.width, size.height)];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    
    - (UIImage *)aspectFitToSize:(CGSize)size
    {
        CGFloat aspect = self.size.width / self.size.height;
        if (size.width / aspect <= size.height)
        {
            return [self scaledToSize:CGSizeMake(size.width, size.width / aspect)];
        } else {
            return [self scaledToSize:CGSizeMake(size.height * aspect, size.height)];
        }
    }
    
    - (UIImage *)aspectFillToSize:(CGSize)size
    {
        CGFloat imgAspect = self.size.width / self.size.height;
        CGFloat sizeAspect = size.width/size.height;
    
        CGSize scaledSize;
    
            if (sizeAspect > imgAspect) { // increase width, crop height
                scaledSize = CGSizeMake(size.width, size.width / imgAspect);
            } else { // increase height, crop width
                scaledSize = CGSizeMake(size.height * imgAspect, size.height);
            }
        UIGraphicsBeginImageContextWithOptions(size, NO, 0.0f);
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGContextClipToRect(context, CGRectMake(0, 0, size.width, size.height));
        [self drawInRect:CGRectMake(0.0f, 0.0f, scaledSize.width, scaledSize.height)];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }
    
    @end
    
    0 讨论(0)
  • 2020-12-07 10:30
    let bannerImageView = UIImageView();
    bannerImageView.contentMode = .ScaleAspectFit;
    bannerImageView.frame = CGRectMake(cftX, cftY, ViewWidth, scrollHeight);
    
    0 讨论(0)
  • 2020-12-07 10:32

    Updated answer

    When I originally answered this question in 2014, there was no requirement to not scale the image up in the case of a small image. (The question was edited in 2015.) If you have such a requirement, you will indeed need to compare the image's size to that of the imageView and use either UIViewContentModeCenter (in the case of an image smaller than the imageView) or UIViewContentModeScaleAspectFit in all other cases.

    Original answer

    Setting the imageView's contentMode to UIViewContentModeScaleAspectFit was enough for me. It seems to center the images as well. I'm not sure why others are using logic based on the image. See also this question: iOS aspect fit and center

    0 讨论(0)
提交回复
热议问题