Ios 在tableViewCell内动态更改UIImageView的宽度和高度

Ios 在tableViewCell内动态更改UIImageView的宽度和高度,ios,uitableview,uiimageview,xib,Ios,Uitableview,Uiimageview,Xib,我有自定义UITableViewCell,它是由xib文件生成的。 我在单元格内有UIImageView,我设置了固定的宽度和高度,40x40,并设置为隐藏 然后在cellForRowAtIndexPath数据源委托中。我检查该单元格的数据源是否包含指向图像的URL。如果有,我将ImageView设置为“显示”。并使用SDWebImage下载图像,并在下载完成时调整完成块中ImageView.frame的大小 实际上,在第一次出现时,它工作正常。我得到了相同大小的ImageView和下载的图像。

我有自定义UITableViewCell,它是由xib文件生成的。 我在单元格内有UIImageView,我设置了固定的宽度和高度,40x40,并设置为隐藏

然后在cellForRowAtIndexPath数据源委托中。我检查该单元格的数据源是否包含指向图像的URL。如果有,我将ImageView设置为“显示”。并使用SDWebImage下载图像,并在下载完成时调整完成块中ImageView.frame的大小

实际上,在第一次出现时,它工作正常。我得到了相同大小的ImageView和下载的图像。但是如果我向下滚动,然后再向上滚动到上面的单元格。它只是重新显示为40x40大小增益。有人能帮忙吗

这是代码,以防你好奇。我想代码没有什么问题。问题是如何在.xib文件中设置UIImageView,但我不知道如何解决它

//    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

if([item postImageURLString]){

        void (^completionBlock)(UIImage *image, NSError *error, SDImageCacheType cacheType) = ^(UIImage *image, NSError *error, SDImageCacheType cacheType) {

            CGRect imageFrame = CGRectMake(cell.frame.size.width/3,cell.frame.size.height -5 -image.size.height, image.size.width, image.size.height);

            [cell.postImageView setFrame:imageFrame];


        };

            [cell.postImageView setHidden:NO];


        [cell.postImageView setImageWithURL:URL completed:completionBlock ];

    }

我怀疑这与tableview重用具有40x40图像视图的单元格有关。看起来,如果tableview重画了单元格,并且您的图像已经被缓存,它就不会执行调整大小的代码。您需要向cellForRowAtIndexPath方法添加代码,以检查图像是否已缓存,以及是否已缓存,然后调整图像视图的大小。

请显示整个方法。你调整图像大小有什么原因吗(你如何保证它不会比单元格大)?我调整图像大小的原因是因为这些图像是由用户上传的,大小可以不同。我将限制宽度以适应ios屏幕。当我解决当前问题时,我将使用HeightForRowAtIndexPath重新调整单元格高度。谢谢您的输入。我注意到这是真的。如果已缓存完成块,则不会调用它。无论如何,我找不到检查图像是否缓存的方法。你能给我举个例子吗?谢谢,我刚想出来。完成块实际上会被调用。但调整大小设置不正确的问题是,我在.xib文件中设置了自动布局约束。现在我把它取下来,它就可以正常工作了。