Ios 如何使UITableView不更改imageView';s帧,或调整图像大小以填充帧大小?

Ios 如何使UITableView不更改imageView';s帧,或调整图像大小以填充帧大小?,ios,uitableview,uiimageview,Ios,Uitableview,Uiimageview,在tableView:cellforrowatinexpath中,我将imageView.image设置为1x1或60x60占位符图像,而单元格高度为300。我还将imageView.frame设置为(0,03000) 然后我调用一个方法downloadImageFromURL:andSetIntoCell,它立即添加一个UIActivityIndicatorView,并将帧设置为(0,03000)(下载是在线程中异步完成的,该方法不会等待下载,而是立即返回) 但是,在tableView:cel

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

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

但是,在
tableView:cellForRowAtIndexPath
返回单元格后,
imageView.frame
被调整为垂直居中原始60x60大小的图像。如果该占位符图像是800x800,它实际上工作正常:帧仍然是(0,0,300,300),并且图像被缩小,但是当图像是60x60时,帧实际上被调整为类似(0120,60,60)的值,这是可以的,因为占位符是透明的,但是
UIActivityIndicatorView
是作为
imageView
的子视图添加的,因此垂直向下推,高度为300,并覆盖下一行的一部分

有没有办法告诉
UITableView
不要更改
imageView.frame
,或者以编程方式轻松地将图像大小调整为300x300(最好不要使用位图上下文),或者告诉
imageView
缩放以填充帧

我补充说:

cell.imageView.contentMode = UIViewContentModeScaleToFill;
设置
imageView.frame
后,如果我在UIView上绘图,它通常会工作,但UITableView仍将显示原始的60x60大小,并调整
imageView.frame
使其垂直居中

(我认为在这种情况下,我可以只制作
UIActivityIndicatorView
图像的大小: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被重新定位和调整大小。

单元格的imageView的帧稍后不会更改。因此,使用
layoutSubviews
,我将此问题解决如下:-

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

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