Rameez Hussain
Rameez Hussain

Reputation: 6754

UIImageView resizes automatically

I am trying to set an image to a UIImageView of a SimpleTableCell in a UITableView. I have changed the size of the imageview, but whenever I try to set the image, it automatically resizes itself. I tried using the code here to resize the image and set it. But it only works when I set the image dimensions to (20x20) which is half of the size of the UIImageView (40x40). So it comes out blurred. I also tried setting UIAspectRatioFit/UIAspectratioFill and clipsToBounds = YES. Nothing seems to work.

Another strange part is that the imageView doesn't resize itself when I use an image directly downloaded from the web like so:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *userImage = [UIImage imageWithData:userImageData scale:self.profileImage.frame.size.height/self.profileImage.frame.size.width];

    UITableViewCell *cell = [self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

    cell.imageView.image = userImage;
}

But then I store this image into a documents directory and then try to reload in elsewhere, the resizing occurs. Any solutions?

Upvotes: 3

Views: 5773

Answers (2)

Lucas Eduardo
Lucas Eduardo

Reputation: 11675

Your SimpleTableCell is a subClass of UITableViewCell that you created? This imageView is a property of this subclass?

Just a guess:

Every UITableViewCell has a built-in imageView read-only property. In the code that you posted, you are using this default property, which I believe cannot have it's frame modified, it's kind of fixed in the left side of the cell.

Look for imageView property inside the documentation: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/index.html#//apple_ref/occ/instp/UITableViewCell/imageView

So, if you do have your custom cell with your own imageView, make sure to not call it imageView too, because you may end using the default UITableViewCell's property, and not your own, which will have all your frame customizations and etc.

You should reference your cell by your customClass and call your property like this:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    UIImage *userImage = [UIImage imageWithData:userImageData scale:self.profileImage.frame.size.height/self.profileImage.frame.size.width];

    SimpleTableCell *cell = (SimpleTableCell*)[self.myTable cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];

    cell.myImageView.image = userImage;
}

Don't know if the problem is really related do this, so let me know if it helped or not.

Upvotes: 14

hgwhittle
hgwhittle

Reputation: 9426

When weird resizing behavior happens for me, Autolayout is my first suspect. Try turning Autolayout off and see if the resizing still occurs.

  1. Select the ViewController in the Storyboard or NIB
  2. Click the 'File Inspector' tab on the right hand side of your Xcode window
  3. Under the 'Interface Builder Document' section, uncheck 'Use Autolayout'

If you need Autolayout you'll probably have to battle it with some code.

Upvotes: 1

Related Questions