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

时间:2012-08-31 09:29:22

标签: ios uitableview uiimageview

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

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

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

有没有办法告诉UITableView不要更改imageView.frame,或者以编程方式轻松地将图片大小调整为300x300(最好不要使用BitmapContext),或告诉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被重新定位并调整大小。

1 个答案:

答案 0 :(得分:0)

细胞图像视图的帧在以后不会改变。因此,使用layoutSubviews,我解决了以下问题: -

使用名为AFNetworking的{​​{1}}方法设置图像我的示例使用64 * 64大小。您可以更改适用于您的表格视图的框架

setImageWithURLRequest:

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

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