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;
}
- 如果坚持之前的写法,要分两步解决现实异常的问题,首先
- 在执行完设置图片的方法后调用[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]);
}
- 重写cell的layoutSubview方法,指定ImageView的frame
-(void)layoutSubviews{
[super layoutSubviews];
self.imageView.frame = CGRectMake(0, 0, 80, 101);
}
Snip20170817_2.png
网友评论