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

3
tableView:cellForRowAtIndexPath方法中,我将imageView.image设置为1x1或60x60的占位符图像,而单元格的高度为300。我还将imageView.frame设置为(0,0, 300, 300)
然后我调用了一个名为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 被重新定位和调整大小。

我也遇到了同样的问题。你能解决吗?如果可以,你是怎么做的? - pkc456
1个回答

0

单元格图像视图的框架后来没有改变。因此,我使用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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接