3

我正在尝试将图像设置为UIImageViewaSimpleTableCell中的 a UITableView。我已经更改了 imageview 的大小,但是每当我尝试设置图像时,它都会自动调整大小。我尝试使用此处的代码来调整图像大小并进行设置。但它仅在我将图像尺寸设置为 (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;
}

但是后来我将此图像存储到文档目录中,然后尝试在其他地方重新加载,调整大小发生。有什么解决办法吗?

4

2 回答 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,因为您可能最终使用 defaultUITableViewCell的属性,而不是您自己的,它将包含您所有的框架自定义等。

您应该通过 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;
}

不知道问题是否真的与这样做有关,所以让我知道它是否有帮助。

于 2013-08-08T15:18:43.297 回答
1

当我发生奇怪的调整大小行为时,自动布局是我的第一个嫌疑人。尝试关闭 Autolayout 并查看大小调整是否仍然发生。

  1. 在 Storyboard 或 NIB 中选择 ViewController
  2. 单击 Xcode 窗口右侧的“文件检查器”选项卡
  3. 在“界面生成器文档”部分下,取消选中“使用自动布局”

如果你需要自动布局,你可能不得不用一些代码来解决它。

于 2013-08-08T15:07:43.017 回答