我没有在iOS6上遇到这个问题,但是目前在iOS7上遇到了这个问题。我有一个UITableView,加载视图时可以看到8个单元格。每一个都填充了来自和数组的不同名称。如果向下滚动,则接下来的两个单元格看起来不错,但是超出此范围的所有内容都会在其上方放置文本。该文本是先前单元格中内容的内容。因此,第10个单元格将具有第一个单元格中的内容以及放置在其顶部的第10个单元格中应具有的内容。
码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
}
//Create Label for Name inside cell
UILabel *name = [[UILabel alloc] initWithFrame:CGRectMake( 7.0, 5.0, 300.0, 30.0 )];
[name setText:[self.entriesArray objectAtIndex:indexPath.row]];
//Check to see if current person is a Parent or Child
NSString *class = [self.database getCellDataWithMembership:[self.MembershipArray objectAtIndex:indexPath.row] andColIndex:4];
if([class isEqualToString:@"CHILD"])
{
name.textColor = [UIColor colorWithRed:25.0f/255.0f green:111.0f/255.0f blue:45.0f/255.0f alpha:1.0f];
name.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.0];
}
[cell.contentView addSubview:name];
return cell;
}
我的表格视图技巧最多是临时的。我一直在阅读许多文档和研究解决方案,但无法提出解决方案。我觉得奇怪的是,它适用于iOS6,但不适用于iOS7。
因此,它从数组中获取一个人的名字,我想用这些名字填充单元格。我最初能够使用以下方法完成此操作:
cell.textLabel.text = [self.entriesArray objectAtIndex:indexPath.row];
if([class isEqualToString:@"CHILD"])
{
cell.textLabel.textColor = [UIColor colorWithRed:25.0f/255.0f green:111.0f/255.0f blue:45.0f/255.0f alpha:1.0f];
cell.textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:17.0];
如果我使用它而不是第一个代码块中的“名称” UILabel操作,那么它将完美地显示名称,而不会覆盖文本,但是问题是文本颜色。如果将它们标记为“CHILD”(儿童),则它们应为绿色文本和粗体。但是,向下滚动后,每个人在不应该看到的时候都会变成绿色。
很抱歉,这个冗长的问题。我一直在努力,并为此绞尽脑汁,但我似乎无法弄清楚。任何帮助将不胜感激。
最佳答案
我正在将UI对象动态添加到单元格。正如“caglar”指出的那样,添加然后删除并不是最佳实践。但是,我也在这样做。每次显示时,我要向单元格中添加大量UI对象的方法是先删除所有子视图。然后,willDisplayCell委托将它们添加回去。显然,如果您只想删除某些视图,则必须标记视图并在删除时更具选择性。但是您可以使用以下所有内容删除它们。
-(void)tableView:(UITableView *)tableView
willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath {
[[cell.contentView subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];
}
只要确保您要在单元格的contentView中添加/删除标签即可。如果您不小心,在iOS7中也将其删除。
希望它可以帮助您。
关于iphone - UITableViewcell中的UILabel在iOS 7中彼此重叠,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19043767/