我有以下代码为UITableViewCell绘制分隔线和文本。它看起来很好,但当我滚动屏幕然后回来时,分隔线已经消失,但文本仍然很好。有什么想法吗?
static NSString *aProgressIdentifier = @"CustomerCell";
UITableViewCell *aCustomerCell = [iTableView dequeueReusableCellWithIdentifier:aProgressIdentifier];
if (!aCustomerCell) {
aCustomerCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:aProgressIdentifier] autorelease];
aCustomerCell.contentView.backgroundColor = [UIColor whiteColor];
UIImageView *aLine = [[UIImageView alloc] initWithFrame:CGRectMake(0, 72, 800, 1)];
aLine.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
[aCustomerCell addSubview:aLine];
[aLine release];
}
CMACustomer *aCustomerObject = aCellObject;
aCustomerCell.textLabel.text = aCustomerObject.customerFullName;
aCustomerCell.detailTextLabel.text = nil;
aCell = aCustomerCell;
答案 0 :(得分:2)
尝试将“aLine”图像视图添加为contentView的子视图,而不是整个表本身。可能在重复使用单元格然后再次调用layoutSubviews时,contentView会重叠(白色背景)您的aLine。事实上,考虑到iOS默认单元格的子视图每次在屏幕上显示时都会动态重绘和调整大小。
所以我会试试这个:
[aCustomerCell.contentView addSubview:aLine];
如果这不起作用,你可以做的是完全删除contentView并添加你自己的自定义子视图(在if(!aCustomerCell)内部执行此操作,而不是在外部,除非你不能获得单元格的好处次使用):
if (!aCustomerCell) {
aCustomerCell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:aProgressIdentifier] autorelease];
[cell.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
UIImageView *aLine = [[UIImageView alloc] initWithFrame:CGRectMake(0, 72, 800, 1)];
aLine.backgroundColor = [UIColor colorWithWhite:0.9 alpha:1.0];
[aCustomerCell.contentView addSubview:aLine];
[aLine release];
}
最后,另一项检查是验证单元高度是否> 72(这似乎是一个微不足道的检查,但它往往是令人头疼的问题!)。
答案 1 :(得分:1)
表视图使用的是单元格池,因此无法确定您为任何给定的索引路径获取哪个单元格。您可以使用单元格或内容视图,但请确保每个单元格只添加一个自定义行。
UIImageView *aLine = (UIImageView *)[cell viewWithTag:64];
if (!aLine) {
// etc.
UIImageView *aLine = [[UIImageView alloc] initWithFrame:CGRectMake(0, 72, 800, 1)];
aLine.tag = 64;
[cell addSubview:aLine];
//
}
// other formatting logic here, you can also hide/show aLine based on biz logic
答案 2 :(得分:0)
尝试将其添加到contentView
[aCustomerCell.contentView addSubview:aLine]