0

我有一个带有自定义表格单元格的 TableView。我以编程方式在每个单元格的底部添加边框以保持屏幕设计布局。一切都很好,当应用程序第一次加载时。但是在滚动(并滚动回顶部)后,屏幕上会显示多条边框线。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{  static NSString *CellIdentifier = @"CellProgramm";
ProgrammTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

...

if([object.cellMessageArray[1] isEqualToString:@"wrapper"] || [object.cellMessageArray[1] isEqualToString:@"keynote"] || [object.cellMessageArray[1] isEqualToString:@"break"]) {
UIImageView *lineSeparator = [[UIImageView alloc] initWithFrame:CGRectMake(0, cell.bounds.size.height, 1024, 5)];
lineSeparator.image = [UIImage imageNamed:[NSString stringWithFormat:@"blind.png" ]];
lineSeparator.backgroundColor = [UIColor whiteColor];
[cell.contentView addSubview:lineSeparator];
}
else if([object.cellMessageArray[1] isEqualToString:@"standard"]) {
UIImageView *lineSeparator = [[UIImageView alloc] initWithFrame:CGRectMake(60, cell.bounds.size.height+4, 1024, 1)];
lineSeparator.image = [UIImage imageNamed:[NSString stringWithFormat:@"blind.png" ]];
lineSeparator.backgroundColor = [UIColor pxColorWithHexValue:@"eeeeee"];
[cell.contentView addSubview:lineSeparator];
}
}

有人有想法吗?

4

1 回答 1

2

当你滚动一个 tableview 时,单元格被重用 ( dequeueReusableCellWithIdentifier) 以优化性能。在上面的代码中,lineSeparator每次cellForRowAtIndexPath调用该方法时都会向单元格添加一个图像视图。如果该单元格被使用 5 次,它将添加 5 个图像视图。

解决此问题的一种方法是lineSeparator在重新使用之前从单元格中删除图像视图。这通常在单元格的prepareForReuse方法中完成。

在 中,为图像视图cellForRowAtIndexPath添加一个标签(例如,lineSeparatorlineSeparator.tag = 100;

在您的单元格的类中,实现该prepareForReuse方法。例如:

-(void)prepareForReuse{
    UIView *lineSeparatorView = [self.contentView viewWithTag:100];
    [lineSeparatorView removeFromSuperview];
}
于 2013-05-15T14:41:22.867 回答