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

Posted

技术标签:

【中文标题】在 tableViewCell 内动态更改 UIImageView 的宽度和高度【英文标题】:change width and height of UIImageView dynamically inside tableViewCell 【发布时间】:2013-07-17 18:51:55 【问题描述】:

我有自定义 UITableViewCell 由 xib 文件制成。 我在那个单元格中有 UIImageView,我设置了固定的宽度和高度以及 40x40 并设置为隐藏

然后在 cellForRowAtIndexPath 数据源委托中。我检查该单元格的数据源是否包含 image 的 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 ];

    

【问题讨论】:

请显示整个方法。您调整图像大小是否有原因(您如何保证它不会比单元格大)? 我调整大小的原因是因为这些图片是用户上传的,大小可以变化。我将限制宽度以适合 ios 屏幕。当我解决当前问题时,我将实现 HeightForRowAtIndexPath 以重新调整单元格的高度。 【参考方案1】:

我怀疑这与 tableview 重用具有 40x40 图像视图的单元格有关。它看起来像SDWebImage will not run your completion block if the image is already cached,所以如果 tableview 重绘单元格并且你的图像已经被缓存,它永远不会执行调整大小的代码。您需要在 cellForRowAtIndexPath 方法中添加代码,以检查图像是否已缓存,如果已缓存,则调整图像视图的大小。

【讨论】:

感谢您的意见。我注意到这是真的。如果完成块已经被缓存,它永远不会被调用。无论如何,我找不到检查图像是否被缓存的方法。你能给我举个例子吗?谢谢 我刚刚想通了。完成块实际上被调用。但是没有正确设置调整大小的问题是因为我在 .xib 文件中设置了自动布局约束。现在我删除它,它工作得很好。

以上是关于在 tableViewCell 内动态更改 UIImageView 的宽度和高度的主要内容,如果未能解决你的问题,请参考以下文章

在可变高度 TableViewCell 内根据动态本地内容确定 UIWebView 高度

使用委托使用按钮更改 tableViewCell 内 UITextField 的值

在自定义 TableViewCell 中动态更改 UILabel 框架

重新加载数据时 TableViewCell 中的动画

更改 TableViewCell 内的 UIPageControl 的 CurrentPage 时出现问题

SWIFT / UIKit 页脚文本显示在动态 tableViewCell 上