UIImageView自动调整大小

3
我正在尝试将一个图片设置为UITableView中的SimpleTableCellUIImageView。我已经更改了图片视图的大小,但是每当我尝试设置图片时,它就会自动调整大小。我尝试使用此处的代码来调整图片大小并设置它,但是只有当我将图像的尺寸设置为(20x20)时才有效,这只是UIImageView(40x40)大小的一半。所以它会变得模糊不清。我还尝试设置UIAspectRatioFit/UIAspectratioFillclipsToBounds = YES,但仍然无法解决问题。
另一个奇怪的地方是,当我直接从网上下载图片时,imageView并不会自动调整大小,就像这样:
- (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;
}

但是,当我将这个图像存储到文档目录中并尝试在其他地方重新加载时,会发生大小调整。是否有解决方法?

你的SimpleTableCell是你创建的UITableViewCell的子类吗?这个imageView是这个子类的一个属性吗? - Lucas Eduardo
你尝试过将UIViewAutoResizeMask设置为None吗? - Danyun Liu
是的,我尝试将UIVIewAutoResizeMask设置为none,并将contentMode设置为UIViewContentModeScaleAspectFit。 - Rameez Hussain
2个回答

14

您创建的SimpleTableCell是UITableViewCell的子类?这个imageView是这个子类的属性吗?

猜测:

每个UITableViewCell都有一个内置的imageView只读属性。在您发布的代码中,您正在使用此默认属性,我认为无法修改其框架,它基本上固定在单元格的左侧。

在文档中查找imageView属性:https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITableViewCell_Class/index.html#//apple_ref/occ/instp/UITableViewCell/imageView

因此,如果您确实拥有自定义单元格和自己的imageView,请确保不要将其也命名为imageView,因为您可能会使用默认的UITableViewCell属性,而不是您自己的属性,后者将具有所有框架自定义等内容。

您应该通过您的customClass引用您的单元格,并像这样调用您的属性:

- (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;
}

我不确定问题是否与此相关,请让我知道它是否有帮助。


我正在使用的单元格是iOS提供的默认UITableViewCell,它不是自定义的。 - Rameez Hussain
所以,就像我说的那样,编辑这些默认只读属性并不是一个好的做法。你应该考虑创建自己的自定义单元格,其中包含一个imageView,在其中您可以自由地编辑其属性,如frame、contentMode等。 - Lucas Eduardo
2
是的,最后我还是这样做了,尽管我一直在努力避免这种情况发生。但还是谢谢你的回答。 :) - Rameez Hussain
2
你的回答救了我的命。 - Petar
1
哇,原来即使自定义了UITableViewCell,默认情况下它也有一个imageView属性,感谢提供这个信息,避免了很多挫败感。 - vishal dharankar

1
当我遇到奇怪的调整大小行为时,自动布局是我的第一嫌疑。尝试关闭自动布局并查看是否仍然发生调整大小。
  1. 在Storyboard或NIB中选择ViewController
  2. 点击Xcode窗口右侧的“文件检查器”选项卡
  3. 在“接口构建文档”部分,取消选中“使用自动布局”
如果需要自动布局,则可能需要使用一些代码来解决。

同意,但也要检查ImageView的contentMode。确保它是“*Fit”模式之一。 - danh
我没有使用自定义单元格。我只想使用默认的UITableViewCell并相应地更改框架。 - Rameez Hussain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接