ios - 如何使 UITableView 不改变 imageView 的框架,或调整图像的大小以填充框架大小?

标签 ios uitableview uiimageview

tableView:cellForRowAtIndexPath 中,我将 imageView.image 设置为 1x1 或 60x60 占位符图像,而单元格的高度为 300。我还设置了 imageView.frame(0,0, 300, 300)

然后我调用一个方法 downloadImageFromURL:andSetIntoCell,它立即添加一个 UIActivityIndi​​catorView 并将框架设置为 (0,0, 300, 300)(下载是在一个线程中异步完成的,该方法不会等待下载,而是立即返回)。

但是,在 tableView:cellForRowAtIndexPath 返回单元格后,imageView.frame 被调整为垂直居中原始 60x60 大小的图像。如果该占位符图像为 800x800,它实际上工作正常:框架仍然是 (0,0, 300, 300) 并且图像按比例缩小,但是当图像为 60x60 时,框架实际上被调整为类似 (0,120, 60, 60), 这没问题,因为占位符是透明的,但是 UIActivityIndi​​catorView 被添加为 imageView 的 subview ,因此被垂直向下推,高度为300 并覆盖下一行的一部分。

有没有办法告诉 UITableView 不要更改 imageView.frame,或者以编程方式轻松地将图像调整为 300x300(最好不要使用 BitmapContext),或者告诉 imageView 缩放以填充框架?

我补充说:

cell.imageView.contentMode = UIViewContentModeScaleToFill;

设置 imageView.frame 后,如果我在 UIView 上绘制通常可以正常工作,但 UITableView 仍将显示原始 60x60 大小,并将 imageView.frame 调整为垂直居中。

(我认为在这种情况下,我可以将 UIActivityIndi​​catorView 设置为图像的大小:60x60,但据说是用 1x1 透明占位符图像来实现)

更新:顺便说一下,我什至添加了:

self.table.autoresizesSubviews = NO;
self.table.autoresizingMask = UIViewAutoresizingNone;

cell.autoresizesSubviews = NO;
cell.autoresizingMask = UIViewAutoresizingNone;

cell.imageView.autoresizesSubviews = NO;
cell.imageView.autoresizingMask = UIViewAutoresizingNone;

在返回单元格之前,它是相同的:重新定位和调整 imageView 的大小。

最佳答案

cell 的 imageview 的帧以后不会改变。所以使用 layoutSubviews,我解决这个问题如下:-

使用 AFNetworking 的名为 setImageWithURLRequest: 的方法设置图像:我在示例中使用 64*64 大小。您可以更改适用于您的表格 View 的框架

NSURL *urlMapThumbnail = [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/staticmap?zoom=8&size=65x65&maptype=roadmap&markers=color:red%7Clabel:S%7C28.5002761,77.08126909999999"];

__weak UITableViewCell *cellTemp = cell;
[cell.imageView setImageWithURLRequest:[NSURLRequest requestWithURL:urlMapThumbnail]
                      placeholderImage:[UIImage imageNamed:@"sotrelocation"]
                               success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                                   CGSize finalSize = CGSizeMake(64, 64);
                                   image = [UIImage imageWithImage:image scaledToSize:finalSize];
                                   cellTemp.imageView.image = image;
                                   [cellTemp layoutSubviews];
                               } failure:nil];

//重新缩放图片大小的方法

+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)newSize {
    //UIGraphicsBeginImageContext(newSize);
    UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
    [image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

关于ios - 如何使 UITableView 不改变 imageView 的框架,或调整图像的大小以填充框架大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12212565/

相关文章:

ios - 从应用程序启动警报警报

iphone - 如何重命名文档目录中的文件?

ios - 没有数据可用标签未显示在表格 View 中

uitableview - 设置分组 TableView 背景颜色

ios - 打电话回来后从通知中心收到通知

ios - 使用没有属性名称的 RestKit 映射 JSON

ios - UITableView 和模型数组中的单元格

ios - 为什么 UICollectionViewDelegate 和 UICollectionViewDataSource 是分开的协议(protocol)?

ios - 平移/调整大小/旋转后在 UIImageView 上重新创建相同的转换

java - 六边形 ImageView 圆角