【问题标题】:iPhone UITableView stutters with custom cells. How can I get it to scroll smoothly?iPhone UITableView 与自定义单元格结结巴巴。我怎样才能让它平滑滚动?
【发布时间】:2010-03-26 21:12:26
【问题描述】:

我正在使用 UITableView 来显示使用 Interface Builder 创建的自定义单元格。表格滚动不是很流畅(它“结结巴巴”),这让我相信单元格没有被重用。这段代码有问题吗?

- (UITableViewCell *)tableView:(UITableView *)tableView 
       cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"TwitterCell";
TwitterCell *cell = (TwitterCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil){
    //new cell
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"TwitterCell" 
                                                   owner:nil options:nil];

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[TwitterCell class]])
        {
            cell = (TwitterCell *)currentObject;
            break;
        }
    }

}

if([self.tweets count] > 0) {
    cell.lblUser.text = [[self.tweets objectAtIndex:[indexPath row]] username];
    cell.lblTime.text = [[self.tweets objectAtIndex:[indexPath row]] time];
    [cell.txtText setText:[[self.tweets objectAtIndex:[indexPath row]] text]];
    [[cell imgImage] setImage:[[self.tweets objectAtIndex:[indexPath row]] image]];
} else {
    cell.txtText.text = @"Loading...";
}


cell.selectionStyle = UITableViewCellSelectionStyleNone;

return cell;
}

【问题讨论】:

  • 在 IB 中,单元格的 Identifier 是否设置为“TwitterCell”?

标签: iphone interface uitableview builder


【解决方案1】:

也许 atebits(Tweetie 的创建者)的这篇博文可以帮助您:http://blog.atebits.com/2008/12/fast-scrolling-in-tweetie-with-uitableview/

切入正题,秘诀如下:每个表格单元格有一个自定义视图,并进行自己的绘图。听起来很简单?那是因为它是。它实际上比处理大量标签和图像的子视图更简单,而且速度快了大约数十亿倍(根据我的非正式测试)。

【讨论】:

  • 请注意,此实现(“直接绘图”)需要您仔细考虑可访问性功能,您可以通过使用 UILabel 免费获得这些功能。
  • 我没有在 IB 中将单元标识符设置为 TwitterCell,因此这给了我显着的改进......但我认为这种实现绝对是获得最佳性能的最佳方式。谢谢!
【解决方案2】:

几件事:

  1. 确保 IB 中的单元格标识符与您在 cellForRowAtIndexPath 方法中查找的标识符相匹配
  2. 不太可能是罪魁祸首,但还是要进行性能调整,缓存您拉出的“Tweet”以避免从 NSArray 中获取它的(小)成本

【讨论】:

    【解决方案3】:

    通过不加载 nib 并完全在代码中创建自定义单元格,您可能会发现很多加速。

    否则,您需要进行一些分析以找出任何隐藏的减速潜伏在哪里。

    【讨论】:

      【解决方案4】:

      如果您使用 nib 文件来加载表格视图单元格,那么显然加载会花费一些时间并且会产生生涩的感觉。

      所以最好的方法是使用代码设计视图并覆盖方法

      drawInRect

      这将使您的应用程序在 UITableView 的情况下滚动非常流畅。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-29
        • 2018-09-11
        • 2021-02-03
        相关资源
        最近更新 更多