Hiren
Hiren

Reputation: 12780

how to set image in top avoiding space in UIimageView

I've an UIImageView with content mode Aspect Fit of size 220x155. I'm dynamically inserting different images in different resolutions, but all larger than the size of the UIImageView. As the content mode is set to Aspect Fit, the image is scaled with respect to the ratio to fit the UIImageView.

My problem is, that if for instance the image inside the UIImageView is scaled to 220x100, I would like the UIImageView to shrink from a height of 155 to 100 too to avoid space between my elements.

How can I do this?

Upvotes: 4

Views: 5888

Answers (3)

George
George

Reputation: 4029

I wrote this method to get me the frame of the image view once it loaded an image. So , the requirements for me were the same as in your case:

1) image view with aspect fit content mode 2) get the exact frame of the image ( this way you can re-position the image view )

Hope this helps:

- (CGRect) getFrameOfImage:(AsyncImageView *) imgView
{
    if(!imgView.loaded)
        return CGRectZero;

    CGSize imgSize      = imgView.image.size;
    CGSize frameSize    = imgView.frame.size;

    CGRect resultFrame;

    if(imgSize.width < frameSize.width && imgSize.height < frameSize.height)
    {
        resultFrame.size    = imgSize;
    }
    else
    {
        float widthRatio  = imgSize.width  / frameSize.width;
        float heightRatio = imgSize.height / frameSize.height;

        float maxRatio = MAX (widthRatio , heightRatio);
        NSLog(@"widthRatio = %.2f , heightRatio = %.2f , maxRatio = %.2f" , widthRatio , heightRatio , maxRatio);

        resultFrame.size = CGSizeMake(imgSize.width / maxRatio, imgSize.height / maxRatio);
    }

    resultFrame.origin  = CGPointMake(imgView.center.x - resultFrame.size.width/2 , imgView.center.y - resultFrame.size.height/2);

    return resultFrame;
}

I am using here AsyncImageView but it will work just as good with UIImageView. The important thing to remember is to call this method AFTER the image was loaded.

Cheers!

Upvotes: 2

P.J
P.J

Reputation: 6587

Its very simple, you just need to get image actual size, which can be done by

UIImage *image = [UIImage imageName:@""];

then you just need to set frame Like :-

imageView.frame = CGRectMake(0.0, 0.0, image.size.width, image.size.height);

Hope this helps you.

Upvotes: 1

user1264577
user1264577

Reputation: 124

Once the imageview's image is set to the new image (and thus scaled) you can get the height of the image inside the imageview (imageview.image.size.height) and set the imageview's height (frame) accordingly.

Upvotes: 0

Related Questions