我正在使用SDWebImage
库来下载图像,然后使用URL作为密钥将它们缓存在NSMutableDictionary
中。我们的想法是调整UIImage
的大小(即从2800x2000到280x200),UIImageView
的高度将适应它(即高度为200)。因此,细胞高度应分别增长。
在heightForRowAtIndexPath:
内部我遇到了返回高度错误的问题,这是交易:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
static int defaultHeight = 230;
UIImage *image = (UIImage*) [[self images] objectForKey:[NSNumber numberWithInt:[indexPath row]]];
if(!image) {
NSLog(@"Null returned");
return defaultHeight;
}
else {
NSLog(@"Not null");
WKZEventsCell *cell = [[self offscreenCells] objectForKey:CellIdentifier];
if(!cell) {
NSLog(@"DEQUEUED");
cell = [[self tableView] dequeueReusableCellWithIdentifier:CellIdentifier];
[[self offscreenCells] setObject:cell forKey:CellIdentifier];
}
WKZEvent *event = [[self eventList] objectAtIndex:[indexPath row]];
[[cell titleLabel] setText:[event title]];
[[cell placeLabel] setText:[event title]];
[[cell pictureView] setImage:image];
[cell setNeedsLayout];
[cell layoutIfNeeded];
CGSize imageSize = [image size];
CGFloat imageViewWidth = CGRectGetWidth([[cell pictureView] bounds]);
CGFloat correctHeight = (imageViewWidth / imageSize.width) * imageSize.height;
[[cell pictureView] setFrame:CGRectMake([[cell pictureView] frame].origin.x,
[[cell pictureView] frame].origin.y,
imageViewWidth,
correctHeight)];
NSLog(@"Real: W: %f, H: %f", imageSize.width, imageSize.height);
NSLog(@"Scaled: W: %f, H: %f", imageViewWidth, correctHeight);
NSLog(@"Url: %@", [event image]);
[cell setNeedsLayout];
[cell layoutIfNeeded];
CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height;
height += 1.0f;
NSLog(@"Height: %f", height);
return height;
}
基本上我只是为了测量目的而得到一个单元格实例。打印实际大小和缩放大小的NSLog()
调用很好。问题是height
始终是1044.0
之类的值,它应该返回220
左右的某些内容(例如图像高度缩小到200的示例)。
我在某处读到调用dequeueReusabeCellWithIdentifier:
会导致内存泄漏,所以这是我的第一个假设,但我不确定。