在我的应用程序中,我有一个带有巨大UITableViewCell的UITableView。每个单元都是动态的,并在运行时创建。通过说动态而不仅仅是内容,但布局也是动态的。问题是,它需要太长时间,滚动时会出现断断续续的问题。特别是当新细胞进入屏幕时,至少有1秒钟冻结。
有没有办法改善这种表现?我查看了关于异步加载单元格的本教程:
但是,本教程介绍了如何将数据异步加载到静态单元格中。我需要将动态数据加载到动态布局。
答案 0 :(得分:4)
以下是我希望能帮助您的一些提示
1>>尝试通过在单元格xib中为它们提供可重用的标识符来重用您的tableview单元格(如果单元格是自定义的)。
2 - ;>检查cellForTheRowAtIndexPath方法中的循环(不要在其中执行循环)。
3>>如果要在cellForTheRowAtIndexPath方法中下载图像等数据,请确保以异步方式下载它。
4>>执行UI任务,如在主线程上的单元格中设置图像,如
[NSOperationQueue mainQueue]addOperationWithBlock:{
}];
答案 1 :(得分:1)
在cellForRowAtIndexPath方法中尝试。我在单元格上添加了自定义视图,并在该自定义视图上添加了一个imageview。您可以添加UILabel,UIButton或任何其他内容。
- (UITableViewCell *)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
NSString * CellIndentifier = @"CellIndentifier";
UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:nil];
if(cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIndentifier];
cell.backgroundColor = [UIColor clearColor];
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
}
UIView *cellVW ;
UIImageView *logoImg;
cellVW = [[UIView alloc] initWithFrame:CGRectMake(10, 2, tableView.frame.size.width-20, 216)];
cellVW.backgroundColor = [UIColor clearColor];
cellVW.layer.cornerRadius = 5;
cellVW.layer.borderWidth = 1;
cellVW.layer.borderColor = [[UIColor lightGrayColor] CGColor];
[cell addSubview:cellVW];
logoImg = [[UIImageView alloc] init];
logoImg.frame = CGRectMake(10, 5, tableView.frame.size.width-20, 140);
logoImg.backgroundColor = [UIColor clearColor];
logoImg.layer.borderColor = [[UIColor lightGrayColor] CGColor];
NSURL *imageURL = [NSURL URLWithString:@"https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg"];
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:imageURL] queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{
if(error == nil)
{
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
if([httpResponse statusCode] == 200)
{
UIImage *image = [UIImage imageWithData:data];
logoImg.image = image;
}
else
{
}
}
}];
[cellVW addSubview:logoImg];
return cell;
}