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;
        

我添加了setNeedsLayoutsetNeedsDisplay。 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 下载和设置图片

AFNetworking JSON 到 UITableView - Objective-C

NSURLConnection 有效,但 AFNetworking 无效(在特定 URL 上)

AFNetworking 和下载图像

无法在 AFNetworking POST 请求上设置 HTTP 正文

如何在上传带参数的图像时使用 AFNetworking 2.0 设置 cookie?