AFNetworking用URL设置UITableViewCell的imageView图片,设置图片后imageview frame还是0
Posted
技术标签:
【中文标题】AFNetworking用URL设置UITableViewCell的imageView图片,设置图片后imageview frame还是0【英文标题】:AFNetworking setting an UITableViewCell's imageView image with URL, imageview frame is still 0 after setting image 【发布时间】:2017-03-01 18:51:32 【问题描述】:这是来自UIImageView+AFNetworking
库。
AFImageRequestOperation *requestOperation = [[AFImageRequestOperation alloc] initWithRequest:urlRequest];
[requestOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject)
if ([[urlRequest URL] isEqual:[[self.af_imageRequestOperation request] URL]])
if (success)
success(operation.request, operation.response, responseObject);
else
self.image = responseObject;
[self setNeedsLayout];
[self setNeedsDisplay];
self.af_imageRequestOperation = nil;
我添加了setNeedsLayout
和setNeedsDisplay
。 imageview,在这种情况下是 UITableViewCell
的 imageView,仍然有一个 0,0,0,0
框架。单击单元格将刷新图像视图,否则图像不会显示。
如何强制UIImageView
调整大小?
我试过了
self.image = responseObject;
self.frame = CGRectMake(self.frame.origin.x, self.frame.origin.y,
self.image.size.width, self.image.size.height);
[self setNeedsDisplay];
[self setNeedsLayout];
基于
How to make UIImageView automatically resize to the size of the image loaded
的设置框架的解决方案。我可以在那里注销一个更大的框架,但它不会显示在屏幕上。
【问题讨论】:
【参考方案1】:如果没有看到您的其余代码很难判断,但我相信问题可能出在您的请求操作的完成处理程序中:
if (success)
success(operation.request, operation.response, responseObject);
else
self.image = responseObject;
[self setNeedsLayout];
[self setNeedsDisplay];
您似乎仅在请求失败时才设置图像。将其移至成功块可能会修复它。
if (success)
success(operation.request, operation.response, responseObject);
self.image = responseObject;
[self setNeedsLayout];
[self setNeedsDisplay];
您不使用 AFNetworking/UIImageView+AFNetworking.h 方法是否有特殊原因?似乎它们适合您的用例。
- (void)setImageWithURL:(NSURL *)url
placeholderImage:(nullable UIImage *)placeholderImage;
- (void)setImageWithURLRequest:(NSURLRequest *)urlRequest
placeholderImage:(nullable UIImage *)placeholderImage
success:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, UIImage *image))success
failure:(nullable void (^)(NSURLRequest *request, NSHTTPURLResponse * _Nullable response, NSError *error))failure;
【讨论】:
以上是关于AFNetworking用URL设置UITableViewCell的imageView图片,设置图片后imageview frame还是0的主要内容,如果未能解决你的问题,请参考以下文章
AFNetworking JSON 到 UITableView - Objective-C
NSURLConnection 有效,但 AFNetworking 无效(在特定 URL 上)