UITableViewCells重叠

时间:2011-04-21 01:58:13

标签: iphone objective-c ios4 uitableview uilabel

我有一个UITableViewCell,detailTextLabel导致单元格框架依赖于它的大小。

我的代码是:

索引方法行的单元格

cell.textLabel.text = @"Rights";
            cell.backgroundColor = [UIColor clearColor];
            cell.detailTextLabel.lineBreakMode = UILineBreakModeWordWrap;
            cell.detailTextLabel.numberOfLines = 0;
            cell.detailTextLabel.text = [self getItemForKey:kRights];
            cell.textLabel.font = [UIFont systemFontOfSize:15];
            cell.detailTextLabel.font = cell.textLabel.font;
            cell.textLabel.textColor = [UIColor colorWithRed:54.0f/255.0f green:54.0f/255.0f blue:54.0f/255.0f alpha:1.0f];
            CGSize constraintSize = CGSizeMake(310.0f, MAXFLOAT);
            CGSize labelSize = [[cell.detailTextLabel text] sizeWithFont:[cell.detailTextLabel font] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];
            cell.detailTextLabel.frame = CGRectMake( 0, 0, 310, labelSize.height);
            cell.userInteractionEnabled = YES;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
            cell.accessoryType = UITableViewCellAccessoryNone;

索引方法行的高度

 if (indexPath.row == 3){
                NSString *text = [self getItemForKey:kRights];
                CGSize constraintSize = CGSizeMake(310.0f, MAXFLOAT);
                CGSize labelSize = [text sizeWithFont:[UIFont systemFontOfSize:15]
                                    constrainedToSize:constraintSize 
                                        lineBreakMode:UILineBreakModeWordWrap];
                return labelSize.height+11;
            }

但是,如果标签的尺寸太大,则细胞彼此重叠。请问您能告诉我如何防止这种情况发生?

这是一张图片,向您展示我的问题:

http://img689.imageshack.us/i/screenshot2011042102520.png/

1 个答案:

答案 0 :(得分:1)

您是否忘记了在索引方法行的高度,是否考虑了单元格的其余内容?您将在detailTextLabel的高度上添加11个点。它看起来不够。运行[@“Rights”sizeWithFont:[UIFont systemFontOfSize:15]]返回高度19.所以,你需要那么多来考虑textLabel高度,以及你在textLabel和amp;之间留下的任何空间。细节,加上单元格中的顶部和底部边距,以及单元格的任何其他内容。

此外,从您的屏幕截图来看,您可能会在此特定单元格中重叠内容。这可能是您为detailTextLabel设置的框架的结果:

cell.detailTextLabel.frame = CGRectMake( 0, 0, 310, labelSize.height);

您可以将帧的原点设置为(0,0),即单元格的左上角。这将使detailTextLabel与单元格的textLabel重叠。

希望这有用。