UITableViewCell中用SDWebImage往UIImageView中加载图片时显示异常

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 父类是UIView UITableView的每一行都是一个UITableViewC...
    翻这个墙阅读 6,682评论 0 1
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,259评论 4 61
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,219评论 30 472
  • UITableViewCell控件空间构造 cell的子控件是contentView,contentView的子控...
    CoderZXS阅读 740评论 0 1
  • 感恩雨露胃恩泽在大地;感恩一年有四季;感恩世界还算和平;感恩家人时刻关爱和朋友一路相伴;感恩,我还健康活着。 ...
    中华燕阅读 596评论 1 1