在iPhone中dynamic更改UITableviewCell高度?

我在UITableViewCell中有三个自定义的UILabel。 像这样的单元devise,

Date(12.1.2012) Time(12.00pm) Cost: $20.00 Details 

我已经在- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;指定了行高100 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; 。 但是,现在细节有时会从服务器返回空(Null)。 在那个时候,我需要从单元格中删除细节标签,并将特定的单元格(行)高度更改为70.我该怎么做? 我在Google中最好地search了我的级别。 但是,我仍然只是困惑这样做。 你能帮我么? 谢谢。 我从这个链接了一些想法 – http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ 。 他们只用一个标签来调整行高。 请帮帮我。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 90; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {  static NSString *CellIdentifier = @"Cell";  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];  if (cell == nil)  {    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];    UILabel *dateLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];    dateLabel.tag = 100;    dateLabel.backgroundColor = [UIColor clearColor];    dateLabel.font = [UIFont fontWithName:@"Helvetica" size:16];    dateLabel.font = [UIFont boldSystemFontOfSize:16];    dateLabel.highlightedTextColor = [UIColor whiteColor];    [cell.contentView addSubview: dateLabel]; UILabel *timeLabel = [[UILabel alloc] initWithFrame:CGRectMake(120, 0, 200, 25)];    timeLabel.tag = 101;    timeLabel.backgroundColor = [UIColor clearColor];    timeLabel.font = [UIFont fontWithName:@"Helvetica" size:14];    timeLabel.highlightedTextColor = [UIColor whiteColor];    [cell.contentView addSubview: timeLabel]; UILabel *costLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 30, 300, 25)];    costLabel.tag = 102;    costLabel.backgroundColor = [UIColor clearColor];    costLabel.font = [UIFont fontWithName:@"Helvetica" size:14];    costLabel.font = [UIFont boldSystemFontOfSize:14];    costLabel.highlightedTextColor = [UIColor whiteColor];    [cell.contentView addSubview: costLabel];    UILabel *eventLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 60, 300, 25)];    eventLabel.tag = 103;    eventLabel.backgroundColor = [UIColor clearColor];    eventLabel.font = [UIFont fontWithName:@"Helvetica" size:14];    eventLabel.font = [UIFont boldSystemFontOfSize:14];    eventLabel.highlightedTextColor = [UIColor whiteColor];    [cell.contentView addSubview: eventLabel]; }  UILabel *dateLabel = (UILabel *) [cell.contentView viewWithTag:100];  dateLabel.text = [DateArray objectAtIndex:indexPath.row]; UILabel * timeLabel = (UILabel *) [cell.contentView viewWithTag:101];  timeLabel.text = [timeArray objectAtIndex:indexPath.row]; UILabel * costLabel = (UILabel *) [cell.contentView viewWithTag:102];  costLabel.text = [costArray objectAtIndex:indexPath.row];  UILabel *eventLabel = (UILabel *) [cell.contentView viewWithTag:103]; NSString *description = [eventArray objectAtIndex:indexPath.row]; if([description isEqualToString:@""]) { eventLabel.text = @""; // Here i don't want to show this label and resize(reduce) the row height to 60; } else {  eventLabel.text = description; }  return cell; } 

我怎样才能做到这一点? 谢谢。

在返回高度时,检查详细描述是否为空。 如果是回报60。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *description = [eventArray objectAtIndex:indexPath.row]; if([description isEqualToString:@""]) return 60 else { return 90; } } 

另外,您需要在cellForRowAtIndexPath:中的相同if语句中使用@"Details"来删除标签。 预先标记,从子视图中标识并从单元格中删除。

你可以使用CGSize来检查返回string的大小 –

 CGSize size = [detailStr sizeWithFont:[UIFont boldSystemFontOfSize:12.0f] constrainedToSize:CGSizeMake(190, 40) lineBreakMode:UILineBreakModeWordWrap]; 

你可以根据你的情况改变宽度,高度和字体。 在计算大小之前,请检查detailStr是否不等于零。