添加子视图到UITableViewCell

当我将子视图添加到UITableViewCell时遇到了麻烦。 当桌子尺寸低于iPhone尺寸时,它正在工作。

但是当尺寸更大的时候,当我滚动的时候会造成一些可怕的效果:

在这里输入图像说明

这应该是这样的:

在这里输入图像说明 那么我认为它来自细胞再利用。 这是我的代码示例:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *kCellIdentifier = @"UITableViewCellStyleSubtitle"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; if (cell == nil) { //construct the cell cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier] autorelease]; //clear the previuous content NSLog(@"Il ya %d subviews", [[[cell contentView] subviews] count]); //[[[cell contentView] subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; NSLog(@"Il ya %d subviews", [[[cell contentView] subviews] count]); [[cell textLabel] setBackgroundColor:[UIColor clearColor]]; [cell setSelectionStyle:UITableViewCellEditingStyleNone]; } switch (indexPath.row) { case 0: [cell addSubview:titleEvent]; break; case 1: //load the owner logo [cell addSubview:logoAsso]; break; case 2: //StartDate [cell addSubview:clockImage]; break; case 3: //EndDate [cell addSubview:clockEndImage]; break; case 4: //Address [cell addSubview:adress]; break; case 5: //map [cell addSubview:map]; break; case 6: //header [Graphism configureSeparationCell:cell]; break; case 7: //descritpion [cell addSubview:descriptionEvent]; break; default: break; } return cell; } 

子视图属于该类的属性,并在方法viewDidLoad中进行configuration。 如果你能告诉我我做错了什么,那会是一种解脱。

 switch (indexPath.row) { case 0: if (![cell.contentView viewWithTag:11]) { titleEvent.tag = 11; [cell.contentView addSubview:titleEvent]; } break; case 1: if (![cell.contentView viewWithTag:11]) { logoAsso.tag = 11; [cell.contentView addSubview:logoAsso]; } 

像这样做所有的开关情况

试试这个代码

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellIdentifier"]; if (cell == nil) { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellIdentifier"] autorelease]; } else { UIView *subView = (UIView *)[cell.contentView viewWithTag:1]; if ([subView superview]) { [subView removeFromSuperview]; } } UIView *subView = [[UIView alloc] init]; subView.tag = 1; [cell.contentView addSubview:subView]; [subView release]; return cell; } 

[cell.contentView addSubview:clockImage];