前言:
在cocoadocs.org上看SDWebImage的文档时看见了这篇blog,感觉以后需要使用。所以翻译了下。技术菜,英语水平不行。望见谅。原文地址SDWebImage fixed width cell images
使用SDWebImage 修改cell images的宽度
当我寻找加载uitableView images的远程资源的简单解决方案时,我发现了一个很棒的库:SDWebImage.这是一个在你的工程中使用非常简单并且为加载和缓存图片提供了很大的灵活性。
当我开始使用它的时候,我碰到这样子的一个问题:从远程web加载了图片尺寸不一致的略缩图。理想情况下,你必须对所有加载到你的UITableViewCell中的图片固定宽度,但在我这边,我无法控制远程图片的宽度,这会导致奇怪的图像变形结果。我所想要做的是在uitableview中包含所有的(不管尺寸)统一的或者固定宽度的图片。为了达到这个目的,我们需要uitableviewcell
的子类并且自定义layoutSubviews
方法来设置一个固定的宽度。
我假设你已经把SDWebImage
文件集成到你的项目中并且在合适的地方加了UITableView的datasource+delegate
。
- 首先你需要创建一个
UITableViewCell
的子类,我这边的类名命名为MyCustomCell
。 打开
MyCustomCell.m
文件,加入下面的代码:- (void)layoutSubviews { [super layoutSubviews]; self.imageView.frame = CGRectMake(5,5,40,32.5); float limgW = self.imageView.image.size.width; if(limgW > 0) { self.textLabel.frame = CGRectMake(55,self.textLabel.frame.origin.y,self.textLabel.frame.size.width,self.textLabel.frame.size.height); self.detailTextLabel.frame = CGRectMake(55,self.detailTextLabel.frame.origin.y,self.detailTextLabel.frame.size.width,self.detailTextLabel.frame.size.height); } }
这里的代码非常容易理解,但我想第二部分的需要一个简单的解释下。我们首先检查是否有image,如果我们有,移动text label
到精确的位置,在我们的示例中时距离右边15pixels。你可以通过CGRectMake()
改变这个值来定制你自己的图片。
跳到你的UITableView的实现文件然后修改你的
cellForRowAtIndexPath
方法来自定义你的cell:如下- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; MyCustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } // Configure the cell... [cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] placeholderImage:[UIImage imageNamed:@"placeholder.png"]];
return cell;
}