我有多个部分,每个部分有10行。但是,滚动表格时它们不会顺利移动。他们有时会停下来。任何人都可以帮我找出原因吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"CustumCell";
CustumCell *cell = (CustumCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustumCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
}
cell.selectionStyle = UITableViewCellSelectionStyleNone;
if ([tableDataArray count] == 0) {
} else {
NSInteger index = indexPath.section * 10 + indexPath.row;
NSString * newsValue =[[tableDataArray objectAtIndex:index]objectForKey:@"NewsValue"];
NSDictionary * newsDict =(NSDictionary *)[newsValue JSONValue];
cell.newsTitleLabel.text = [[tableDataArray objectAtIndex:index]objectForKey:@"Title"];
UIImage *image;
NSString *userString =[newsDict objectForKey:@"imgUrl"];
if([[ImageCache sharedImageCache] DoesExist:userString] == true) {
image = [[ImageCache sharedImageCache] GetImage:userString];
cell.newsImage.image = [ImageResizer squareImageTo:image :CGSizeMake(75, 75)];
} else {
NSURL *url = [NSURL URLWithString:userString];
NSURLSessionTask *task8 = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (data) {
UIImage *image = [UIImage imageWithData:data];
if (image) {
dispatch_async(dispatch_get_main_queue(), ^{
CustumCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath];
if (updateCell)
updateCell.newsImage.image = [ImageResizer squareImageTo:image :CGSizeMake(75, 75)];
[[ImageCache sharedImageCache] AddImage:userString :image];
});
}
}
}];
[task8 resume];
}
}
return cell;
}
答案 0 :(得分:0)
您似乎正在下载图像并在主线程上调整大小,主线程应仅用于UI内容。
您应该将下载移至后台线程,并且还应将调整大小代码移至后台线程。
参考此Lazy load images in UITableView 了解延迟加载的工作原理。
答案 1 :(得分:0)
管理要在UITableView中显示的图像下载非常棘手。通过简单的实现,如果用户快速滚动,则可以启动不再在表视图的可见部分中的图像的数十次下载。由于表视图行被循环使用,因此可以将图像插入到错误的表视图行中。
因此,我强烈建议使用为此目的而构建的图像缓存,例如SDWebImage