UITableViewCell中用SDWebImage往UIIm

2017-08-11  本文已影响22人  爱吃萝卜的小蘑菇

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

发现问题在于我把加载图像的方法写在了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
上一篇下一篇

猜你喜欢

热点阅读