我正在尝试根据文本长度调整UITableView中行的高度。我有以下代码:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSString *cellText =[[topics objectAtIndex:indexPath.row] name];
    UIFont *cellFont = [UIFont fontWithName:@"ArialMT" size:17.0];
    CGSize constraintSize = CGSizeMake(280.0f, MAXFLOAT);
    CGSize labelSize = [cellText sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    return labelSize.height + 20;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
        cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
        cell.textLabel.numberOfLines = 0;
        cell.textLabel.font = [UIFont fontWithName:@"ArialMT" size:17.0];
    }
}


但是,它将UIImageView和UIDetailText弄乱了,如下图所示:



我该如何解决?

我试过了:

[cell.imageView setContentMode:UIViewContentModeScaleToFill];
    [cell.imageView setFrame:CGRectMake(0, 0, 16,16)];
    [cell.imageView setBounds:CGRectMake(0, 0, 16,16)];
    [cell.imageView setAutoresizingMask:UIViewAutoresizingNone];
    [cell.imageView setAutoresizesSubviews:NO];


而且似乎没有工作

最佳答案

您也可以将自己的子视图添加到单元格的内容视图中,而不必像其他人建议的那样进行子分类。

Customizing Cells


  如果您想要细胞具有不同的
  内容组件并拥有这些
  布置在不同的位置,或者
  你想要不同的行为
  细胞的特性,你有
  两种选择。您可以添加子视图
  到
  单元格对象,也可以创建自定义
  UITableViewCell的子类。
  
  
  当您可以使用适当的自动调整大小设置完全指定内容布局并且不需要修改单元格的默认行为时,应将子视图添加到单元格的内容视图中。
  当您的内容需要自定义布局代码或需要更改单元格的默认行为(例如响应编辑模式)时,应创建一个自定义子类。
  


请参阅以下示例:

#define CUSTOM_IMAGE_TAG 99
#define MAIN_LABEL 98

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";
    UIImageView *customImageView = nil;
    UILabel *mainLabel = nil;
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        customImageView = [[[UIImageView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 40.0f, 40.0f)] autorelease];
        customImageView.tag = CUSTOM_IMAGE_TAG;
        [cell.contentView addSubview:customImageView];

        mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(60.0f, 10.0f, 100.0f, 21.0f)] autorelease];
        mainLabel.tag = MAIN_LABEL;
        mainLabel.numberOfLines = 0;
        [cell.contentView addSubview:mainLabel];
    } else {
        customImageView = (UIImageView *)[cell.contentView viewWithTag:CUSTOM_IMAGE_TAG];
        mainLabel = (UILabel *)[cell.contentView viewWithTag:MAIN_LABEL];
    }

    // Configure the cell.
    CGRect frame = mainLabel.frame;
    frame.size.height = ... // dynamic height
    mainLabel.frame = frame;

    return cell;
}


显然,您仍然需要实现tableView:heightForRowAtIndexPath:

10-08 07:32