我正在以下列方式创建一个UITableview单元格
const NSInteger TOP_LABEL_TAG = 1001;
UILabel *topLabel;
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell =[[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]
autorelease];
UIImage *indicatorImage = [UIImage imageNamed:@"indicator.png"];
cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage]
autorelease];
const CGFloat LABEL_HEIGHT = 25;
UIImage *image = [UIImage imageNamed:@"64x64.png"];
topLabel =[[[UILabel alloc] initWithFrame:CGRectMake(
image.size.width + 2.0 * cell.indentationWidth,
0.8 * (tableView.rowHeight - 1.7 * LABEL_HEIGHT),
tableView.bounds.size.width -
image.size.width - 4.0 * cell.indentationWidth
- indicatorImage.size.width,
LABEL_HEIGHT)] autorelease];
[cell.contentView addSubview:topLabel];
topLabel.tag = TOP_LABEL_TAG;
topLabel.textColor = [UIColor colorWithRed:0.25 green:0.0 blue:0.0 alpha:1.0];
topLabel.highlightedTextColor = [UIColor colorWithRed:1.0 green:1.0 blue:0.9 alpha:1.0];
topLabel.font = [UIFont systemFontOfSize:20];
topLabel.textAlignment== UITextAlignmentCenter;
}
else
{
topLabel = (UILabel *)[cell viewWithTag:TOP_LABEL_TAG];
}
topLabel.text = [NSString stringWithFormat:[aboutArray objectAtIndex:[indexPath row]]];
topLabel.textAlignment=UITextAlignmentCenter;
第一次当表加载tableView时工作正常。但是当我从另一个页面导航回这个页面时,表格的第一个单元格中的文本在右边移动,只有一半可见。可能是什么原因??
答案 0 :(得分:1)
这里有一些错误可以帮助你解决问题。
对于初学者,我认为您可能会假设已出列的可重复使用单元格中包含的所有数据与您获取它时的数据相同。它实际工作的方式是你可能会返回相同的单元格,但你可能会得到一个不同的单元格,它根据滚动方向从顶部或底部遗留下来。当细胞不在视野范围内时,它们被标记为可重复使用,没有可预测的顺序。因此,删除else
块,并移动init
块之外的所有逻辑({1}} + autorelease
除外。这样,你真正检查的是如果你需要分配新的内存。
其次,您有if
,您可能想要使用== UITextAlignmentCenter
第三,您用来计算标签几何的数学运算是可疑的。您似乎正在加载图像,然后使用该图像的大小和表格边界来动态计算新的标签框架。我会认真考虑一种接近这种标签框架计算的新方法。你确定这是你能做到的唯一方法吗?在我看来,你的标签框架数学应该每次都相同。
我已经清理了一下,所以它是可读的,并将其放在评论下面以更好地说明我想说的内容。希望这会有所帮助。
=