我正在使用针对iOS 7的XCode 6.3.1。
我正在使用AFNetworking
的{{1}}类别将未知维度的图片下载到UIImageView
。这是一个示例图像:
我遇到的问题是,由于图像的尺寸未知,我只使用占位符图像。如果占位符图像具有完全相同的尺寸,则没有问题。但是,如果尺寸不同,则单元格中存在间距问题。
如果图像小于间距太大。这是一个例子:
我不知道如何在完成下载图像后刷新单元格,以便间距符合UITableViewCell
。
如果我滚动离开单元格并向后滚动,则间距很好。
以下是一些下载图像的示例代码
Auto Layout Constraints
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// Temp
static NSString *Cell = @"CustomListCell";
CustomListCell *cell = (CustomListCell *)[self.tableView dequeueReusableCellWithIdentifier:Cell];
CustomListRow *customListRow = self.customList.rows[indexPath.row];
// Reset the cell
cell.headerImageView.image = nil;
cell.titleLabel.text = @"";
// Download the image, placeholder image is necessary
NSString *topImageURL = @"sample_image";
__weak __typeof(cell)weakCell = cell;
if ([topImageURL isEqualToString:@""] || [topImageURL isEqualToString:@"false"])
{
// Do nothing
} else {
[cell.headerImageView setImageWithName:topImageURL afterManipulation:^UIImage *(UIImage *image) {
// Manipulation
UIImage *newImage = [UIImage expandImage:image toWidth:Constants.screenWidth - 16];
// CustomListCell *updateCell = (CustomListCell *)[tableView cellForRowAtIndexPath:indexPath];
// if (updateCell)
// updateCell.headerImageView.image = newImage;
return newImage;
} placeholderImage:[UIImage expandImage:Constants.placeholderImage toWidth:Constants.screenWidth - 26]];
}
return cell;
}
是我绕过setImageWithName:afterManipulation:placeholderImage:
AFNetworking
的方法....它首先检查图像是否存在于本地,然后再检查两个不同的URL(absolute和base_url +相对)如果图像存在那里。
我将操作块放在那里,以便我可以调用我创建的setImageWithURL
类别方法,该方法将缩放图像以适合UIImage
的宽度(因此唯一的动态部分是高度)。
以下是我尝试的一系列事项:
UITableView
[self.tableView beginUpdates] + [self.tableView endUpdates];
或[cell setNeedsLayout]
[cell setNeedsDiplay];
和setNeedsLayout
没有做任何事情(我将它放在afterManipulation块中,在分配图像之前调用它,我也尝试过它图像已分配。)
重新加载单元格,表格或beginUpdates会导致一些非常奇怪的行为发生。细胞开始混合在一起,一些细胞具有相同的图像(不应该发生)。我不确定发生了什么,但我的猜测是重新加载单元格会导致图像再次下载(或从缓存中拉出),直到加载另一个单元格后才能完成。
答案 0 :(得分:0)
您是否考虑过使用图片视图的contentMode
属性?
用于确定视图在其边界发生更改时如何布置其内容的标志。
我在查看您的实现时发现的一个问题是,您可能会在单元格中看到错误的图像。我看到你在下载图像时将单元格作为参考。这是错误的,原因如下:
表视图单元格被重用,因此当您滚动单元格时,将再次使用离开屏幕的单元格来显示其他行的信息。通过引用单元格而不是索引路径,如果下载需要时间,则在调用完成块时,该单元格可能正在显示不同行的信息,因此,您在其上应用的图像可能不是正确的。
您应该看一下Apple在下载每个表格视图单元格时保持一致性的示例:https://developer.apple.com/library/ios/samplecode/LazyTableImages/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009394-Intro-DontLinkElementID_2