如何使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
,我解决这个问题如下: –
使用AFNetworking
的setImageWithURLRequest:
方法设置图像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; }
- 如何在iOS 10 UserNotifications上设置NSCalendarUnitMinute repeatInterval?
- 观察信息被泄露
- 更stream畅的写意体验(iOS)
- 创build一个segue并通过Swift把它连接到两个视图控制器之间?
- 如何searchiPhone通讯簿中的特定电话号码?
- ABMultiValueGetCount – kABPersonSocialProfileProperty总是返回0? 我怎样才能从地址簿获得Facebook的细节?
- 从base64编码的string获取SecKeyRef
- cordova隐藏状态栏
- 如何在Swift中用@IBOutlet属性正确实现懒惰的实例化