0

我希望行高基于内容高度......所以每个行高的大小都可以根据内容进行调整。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return tableView.contentSize.height;
}

这是我到目前为止所拥有的,但它不起作用。

4

3 回答 3

1

基本上,您需要获取单元格的内容,然后根据它确定单元格的大小。例如,您可能有

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    NSString *string = cell.textLabel.text;
    CGSize textSize = [string sizeWithFont:[UIFont fontWithName:@"Helvetica" size:15] constrainedToSize:CGSizeMake(240, 5000)];
    return textSize.height + 40;
}    

上面的内容是获取单元格中的文本,计算所需的高度(如果它是 240px 宽并使用 Helvetica 15pt),然后相应地更改单元格的高度。你仍然需要cell.textLabel在你的cellForRowAtIndexPath方法中调整你的框架。

于 2012-07-30T22:27:50.183 回答
1
Try this code for exmaple and also refer this http://www.icodeblog.com/2010/11/18/making-smarter-table-view-cells/  

 #define FONT_SIZE 14.0f
    #define CELL_CONTENT_WIDTH 125.0f
    #define CELL_CONTENT_MARGIN 10.0f
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
       // static NSString *CellIdentifier = @"Cell";
        NSString *CellIdentifier = [NSString stringWithFormat:@"%d", indexPath.row] ;
        UILabel *lblTitle = nil;
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;




            lblTitle =[[UILabel alloc]initWithFrame:CGRectMake(5, 15, 110, 44)];
            lblTitle.backgroundColor = [UIColor clearColor];
            lblTitle.textColor = [UIColor whiteColor];
            lblTitle.font = [UIFont systemFontOfSize:11.0];
            lblTitle.tag = 1;
            lblTitle.numberOfLines = 0;


            UILabel *lblType =[[UILabel alloc]initWithFrame:CGRectMake(125, 0, 75, 44)];
            lblType.backgroundColor = [UIColor clearColor];
            lblType.textColor = [UIColor whiteColor];
            lblType.font = [UIFont systemFontOfSize:11.0];
            lblType.tag = 2;

            UILabel *lblDate =[[UILabel alloc]initWithFrame:CGRectMake(200, 0, 60, 44)];
            lblDate.backgroundColor = [UIColor clearColor];
            lblDate.textColor = [UIColor whiteColor];
            lblDate.font = [UIFont systemFontOfSize:11.0];
            lblDate.tag = 3;

            UILabel *lblTime =[[UILabel alloc]initWithFrame:CGRectMake(265, 0, 50, 44)];
            lblTime.backgroundColor = [UIColor clearColor];
            lblTime.textColor = [UIColor whiteColor];
            lblTime.font = [UIFont systemFontOfSize:11.0];
            lblTime.tag = 4;

            [tableView beginUpdates];
            [tableView endUpdates]; 
            [cell.contentView addSubview:lblTitle];
            [cell.contentView addSubview:lblType];
            [cell.contentView addSubview:lblDate];
            [cell.contentView addSubview:lblTime];

        }

    //    lblTitle = (UILabel *) [cell.contentView viewWithTag:1];
    //    lblTitle.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"];
    //    NSString *strTitle =[NSString stringWithFormat:@"%@,%@,%@",[[itemsData objectAtIndex:indexPath.row] objectForKey:@"address"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"zipcode"]];


    //    lblTitle.text = [NSString stringWithFormat:@"%@,%@,%@",[[itemsData objectAtIndex:indexPath.row] objectForKey:@"address"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"zipcode"]];

        NSString *text = [NSString stringWithFormat:@"%@,%@,%@",[[itemsData objectAtIndex:indexPath.row] objectForKey:@"address"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"zipcode"]];


        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeCharacterWrap];

        if (!lblTitle)
            lblTitle = (UILabel*)[cell viewWithTag:1];

        [lblTitle setText:text];
        [lblTitle setFrame:CGRectMake(CELL_CONTENT_MARGIN, CELL_CONTENT_MARGIN, CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), MAX(size.height, 44.0f))];


        UILabel *lblType = (UILabel *) [cell.contentView viewWithTag:2];
        lblType.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"type"];

        UILabel *lblDate = (UILabel *) [cell.contentView viewWithTag:3];
        lblDate.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"date"];

        UILabel *lblTime = (UILabel *) [cell.contentView viewWithTag:4];
        lblTime.text =[[itemsData objectAtIndex:indexPath.row] objectForKey:@"time"];

        return cell;
    }
    -(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *text = [NSString stringWithFormat:@"%@,%@,%@",[[itemsData objectAtIndex:indexPath.row] objectForKey:@"address"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"title"],[[itemsData objectAtIndex:indexPath.row] objectForKey:@"zipcode"]];

        CGSize constraint = CGSizeMake(CELL_CONTENT_WIDTH - (CELL_CONTENT_MARGIN * 2), 20000.0f);

        CGSize size = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraint lineBreakMode:UILineBreakModeCharacterWrap];

        CGFloat height = MAX(size.height, 44.0f);

        return height + (CELL_CONTENT_MARGIN * 2);
    }
于 2012-07-31T06:02:41.737 回答
0

是的,因为这个方法被调用的时候,单元格的内容视图的框架是CGRectZero。您最好将自定义属性分配给单元格并将其返回。

于 2012-07-30T22:00:09.430 回答