UITableViewCell中的UIProgressView在iOS 7中滚动不佳

时间:2014-01-10 00:50:10

标签: ios uitableview ios7 uiprogressview

我遇到了一个问题,其中UIProgressView作为iOS 7上UITableViewCell的子视图使得滚动性能非常差。这个问题在iOS 6或更低版本中并没有真正发生,滚动非常棒。我想知道我是否遗漏了新的UIProgressView或者它只是一个错误。在iOS 7上添加UIProgressView时,我已经看到性能从50-60 fps下降到30-40 fps。下面是一些在iOS 7上复制此帧丢弃的代码。

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

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {

    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

    UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
    progressView.frame = CGRectMake(0, 0, cell.contentView.frame.size.width - 20, progressView.frame.size.height);
    progressView.center = CGPointMake(cell.contentView.frame.size.width/2, cell.contentView.frame.size.height/2);
    progressView.tag = 1;

    [cell.contentView addSubview:progressView];
}

UIProgressView *progressView = (UIProgressView *)[cell.contentView viewWithTag:1];
[progressView setProgress:drand48()];

// Configure the cell...

return cell;}

1 个答案:

答案 0 :(得分:-2)

不是100%确定这是否是导致您所看到的问题,但问题可能在于您在那里创建了两个具有相同名称的UIProgressView变量,因此您可能会遇到引用问题:

UIProgressView *progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
.
.
UIProgressView *progressView = (UIProgressView *)[cell.contentView viewWithTag:1];

我个人会做以下事情,因为这是一个更优雅的解决方案 - 细胞的子类:

·H

@interface ProgressViewCell : UITableViewCell

@property (nonatomic, retain) UIProgressView *progressView;

@end

的.m

- (id)init {
    self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"ProgressViewCell"];

    self.progressView = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];
    self.progressView.frame = CGRectMake(0, 0, self.contentView.frame.size.width - 20, 44);
    self.progressView.center = CGPointMake(self.contentView.frame.size.width/2, self.contentView.frame.size.height/2);
    [self.contentView addSubview:self.progressView];

    return self;
}

然后在你的tableView中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ProgressViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"ProgressViewCell"];

    if (cell == nil) {
        cell = [[ProgressViewCell alloc] init];
    }

    [cell.progressView setProgress:drand48()];

    return cell;
}