UITableView 的代理方法中算出每个cell 的真实高度,然后设置便ok。如下:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell; if (indexPath.section==1) { UITableViewCell *newsCell = [DataTable dequeueReusableCellWithIdentifier:@"newsCell1"]; if (newsCell==nil) { newsCell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"newsCell1"]autorelease]; } CGRect cellFrame = [newsCell frame]; //定义的cell 的 frame cellFrame.origin = CGPointMake(0,0); UILabel *productLabel31=(UILabel *)[newsCell.contentView viewWithTag:111143]; if (!productLabel31) { productLabel31=[[UILabel alloc]initWithFrame:CGRectMake(cellXOffset,6,sectionTwoLabelWidth,10)]; productLabel31.backgroundColor=[UIColor clearColor]; productLabel31.tag=111143; productLabel31.numberOfLines=0; productLabel31.lineBreakMode=UILineBreakModeWordWrap; productLabel31.text=[normalTitleArray objectAtIndex:indexPath.section]; productLabel31.font= [UIFont systemFontOfSize:cellProductLabelFont]; CGSize size = [productLabel31.text sizeWithFont:[UIFont systemFontOfSize:cellProductLabelFont] constrainedToSize:CGSizeMake(sectionTwoLabelWidth, CGFLOAT_MAX) lineBreakMode:UILineBreakModeWordWrap]; //算出cell 的具体高度 productLabel31.frame=CGRectMake(cellXOffset,6,sectionTwoLabelWidth,size.height); [newsCell.contentView addSubview:productLabel31]; [productLabel31 release]; } cell = newsCell; cellFrame.size.height = productLabel31.frame.origin.y+productLabel31.frame.size.height +2; // 改变cell 的frame [cell setFrame: cellFrame]; // 改变cell 的frame } cell.selectionStyle=UITableViewCellSelectionStyleNone; return cell; }最后 还要在 UITableView 的代理方法heightForRowAtIndexPath中设置下cell 的高度:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath]; return cell.frame.size.height; }
效果: