SDWebImage加载图片在cell上显示混乱

发布于 2022-09-02 00:47:36 字数 1467 浏览 19 评论 0

在使用,SDWebImage加载图片的时候,出现图片加载混乱,具体情况是

1> 从服务器获取数据,如果返回的数组有数据即图片地址,则没有问题,如果数组为空那么,这个空数组展示的cell则会出现图片加载紊乱。
2> 我用的SDWebImage加载图片的方法是:
[backgImgView sd_setImageWithURL:[NSURL URLWithString:propertyImgs[i]] placeholderImage:[UIImage imageNamed:[Utils imageNameStr:@"PlaceHolder"]]];

具体使用到的函数:

 for (int i = 0; i < propertyImgs.count; i++) {
            
      UITapGestureRecognizer *backgImgViewTapGR = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(backgImgViewTapGRAction:)];
            backgImgViewTapGR.numberOfTapsRequired  = 1;
            //    backgImgViewTapGR.numberOfTouchesRequired = 1;
            
     UIImageView *backgImgView = [[UIImageView alloc] init];
      backgImgView.userInteractionEnabled = YES;
            [backgImgView addGestureRecognizer:backgImgViewTapGR];
            
          
            
            
            [backgImgView sd_setImageWithURL:[NSURL URLWithString:propertyImgs[i]] placeholderImage:[UIImage imageNamed:[Utils imageNameStr:@"PlaceHolder"]]];
            

            
            backgImgView.frame = CGRectMake(i*Kwidth, 0, Kwidth, scrollContainerView.frame.size.height);//i*Kwidth
            [scrollContainerView addSubview:backgImgView];

            lastImgView = backgImgView;
        }

图片描述

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

一身仙ぐ女味 2022-09-09 00:47:36

题主这个问题让我很疑惑,题主写的这个列表视图,可能使用了用tableView,在cell中嵌套了ScrollView,所以我觉得题主可能是在做一个Cell可以横向滑动的滚动tableView,如果真是这样的话,题主这段加载UIImageView的代码可能是在
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 方法里,代码篇幅有限,不知道题主有没有在每次执行这段代码前,移除scrollContainerView中旧的ImageView

UITableViewCell是有复用机制的,可以有效节省内存开销。所谓的复用机制,就是我们使用的

 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath];

生成的cell,其实不一定是一个新实例,例如你当前屏幕总共可以显示3个cell(如你的图),那你的内存中,可能只有4个cell实例,在不停的循环调用。

所以当你的服务器出现返回空数组的情况时,for循环不执行,但是scrollview中的别的数组的图还在内存中并未清除,所以出现了你所谓的混乱。

如果返回不空,你新创建的UIImageView覆盖了旧的,所以看起来是对的,但是内存在不断增加没有释放。

解决办法:你自己想吧,我也不清楚你完整的代码,只是猜测一下原因。提亮点建议

1 你的scrollContainerView在for循环前面,把所有UIImageView移除掉。

[scrollContainerView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [obj removeFromSuperview];
}]

2 更好的办法是,好好研究一下复用机制,参考著名的nimbus框架的NIViewRecycler类,或者直接拿来用,把你的UIImageView也复用了。可能需要花点时间,但弄明白以后绝对值得。

ps:这个问题跟SDWebImage半毛钱关系都没有。

偏闹i 2022-09-09 00:47:36
显示混乱和这个下载图片的 函数也没关系吧。
摇划花蜜的午后 2022-09-09 00:47:36

试下用带 completed 的方法

图片加载完之后调用一下 cell 的 layoutSubviews

月下伊人醉 2022-09-09 00:47:36

我用过类似的Swift的框架,也有类似的问题,不过稍微一下就又会现实正确的图片。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文