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

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

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

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

有没有办法告诉UITableView不要改变imageView.frame,或者通过编程轻松地将图像大小调整到300×300(最好不要使用BitmapContext),或者告诉imageView进行缩放以填充框架?

我补充说:

 cell.imageView.contentMode = UIViewContentModeScaleToFill; 

设置imageView.frame ,通常工作,如果我在UIView绘图,但UITableView仍然会显示原始的60×60大小,并调整imageView.frame垂直居中。

(我想在这种情况下,我可以让UIActivityIndicatorView的图像的大小:60×60,但据说它是用1×1透明的占位符图像)

更新:顺便说一句,我甚至补充道:

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

在单元格返回之前,它是一样的:imageView被重新定位和resize。

单元格的imageview框架稍后不会改变。 所以使用layoutSubviews ,我解决这个问题如下: –

使用AFNetworkingsetImageWithURLRequest:方法设置图像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; }