美文网首页
UITableViewCell中用SDWebImage往UIIm

UITableViewCell中用SDWebImage往UIIm

作者: 爱吃萝卜的小蘑菇 | 来源:发表于2017-08-11 00:11 被阅读22次

    UITableViewCell中用SDWebImage往UIImageView中加载图片时显示异常,图片原本不显示,只有当点击cell或轮动cell后图片才会出现。而且图片显示的大小和UIImageView的大小不符。

    • 本来不显示图片
    • 点击cell后会显示图片

    发现问题在于我把加载图像的方法写在了UITableViewCell中给它设置数据的Set方法里。
    UITableViewCell中设置图片的方法

    -(void)setCellData:(HomeDataModel *)cellData{
        _cellData = cellData;
        [self.imageView sd_setImageWithURL:[NSURL URLWithString:cellData.imageUrl]];
        self.titleLabel.text = cellData.titleString;
    }
    
    -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
        HomeTableViewCell *homeCell = [tableView dequeueReusableCellWithIdentifier:HomeTableViewCellID];
        homeCell.cellData = self.mainDataArray[indexPath.row];
        return homeCell;
    }
    

    如果在UITableView的DataSource中加载图片则不会出现问题

        HomeTableViewCell *homeCell = [tableView dequeueReusableCellWithIdentifier:HomeTableViewCellID];
        HomeDataModel *dataModel = self.mainDataArray[indexPath.row];
        [homeCell.smallImageView sd_setImageWithURL:[NSURL URLWithString:dataModel.imageUrl]];
        homeCell.titleLabel.text = dataModel.titleString;
        return homeCell;
    }
    
    • 如果坚持之前的写法,要分两步解决现实异常的问题,首先
    1. 在执行完设置图片的方法后调用[weakSelf setNeedsLayout];方法,应为项目用到的AutoLayout所以调用这个方法,如果使用frame可能需要调用setNeedsDisplay方法,没有测试
    -(void)setCellData:(HomeDataModel *)cellData{
        __weak typeof(self) weakSelf = self;
        _cellData = cellData;
        self.imageView.image = nil;//解决cell重用导致的显示图片不正确
        [self.imageView sd_setImageWithURL:[NSURL URLWithString:cellData.imageUrl]completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
            [weakSelf setNeedsLayout];
        }];
        self.titleLabel.text = cellData.titleString;
        
        NSLog(@"%@",[NSThread currentThread]);
    }
    
    1. 重写cell的layoutSubview方法,指定ImageView的frame
    -(void)layoutSubviews{
        [super layoutSubviews];
        self.imageView.frame = CGRectMake(0, 0, 80, 101);
    }
    
    Snip20170817_2.png

    相关文章

      网友评论

          本文标题:UITableViewCell中用SDWebImage往UIIm

          本文链接:https://www.haomeiwen.com/subject/iqwkrxtx.html