Iphone 在分组表格视图中不显示动态表格单元格高度

Iphone 在分组表格视图中不显示动态表格单元格高度,iphone,dynamic,uitableview,height,Iphone,Dynamic,Uitableview,Height,我已在分组表视图中显示联系人详细信息。但细节是动态长度,所以我需要单元格的动态高度。它适用于某些区段,但不适用于Remining区段。这是我的密码 #define PHONE_DETAIL_SECTION 0 #define EMAIL_DETAIL_SECION 1 #define URL_DETAIL_SECTION 2 #define ADDRESS_DETAIL_SECTION 3 #define BIRTHDAY_DETA

我已在分组表视图中显示联系人详细信息。但细节是动态长度,所以我需要单元格的动态高度。它适用于某些区段,但不适用于Remining区段。这是我的密码

    #define PHONE_DETAIL_SECTION 0
    #define EMAIL_DETAIL_SECION 1
        #define URL_DETAIL_SECTION 2
        #define ADDRESS_DETAIL_SECTION 3
        #define BIRTHDAY_DETAIL_SECTION 4
        #define NOTE_DETAIL_SECTION 5
        #define CONSTRAINT_WIDTH 320.0f
        #define FONT_SIZE 17.0f
        #define MARGIN_SIZE 20.0f
        #define NO_OF_SECTION 6


#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return NO_OF_SECTION;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    switch (section) {

        case PHONE_DETAIL_SECTION:
            return [APP_DELGATE.phonenumberDetailLabelArray count];

        case EMAIL_DETAIL_SECION:
            return [APP_DELGATE.emailLabelDetailArray count];

        case URL_DETAIL_SECTION:
            return [APP_DELGATE.urlLabelDetailArray count];

        case ADDRESS_DETAIL_SECTION:
                return [APP_DELGATE.addressDetailLabelArray count]; 

        case BIRTHDAY_DETAIL_SECTION:
            if(birthdateString)
                return 1;
            else
                return 0;

        case NOTE_DETAIL_SECTION:
                if(noteString)
                    return 1;
                else
                    return 0;

        default:
            break;
    }
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    NSLog(@"section:::%d",indexPath.section);
    static NSString *CellIdentifier = @"Cell";

    // DetailCell is subclass of UITableCell which 
    // contains only 2 labels:- lblName & lblValue

    DetailCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) 
    {
        NSArray *cellArray=[[NSBundle mainBundle] loadNibNamed:@"DetailCell" owner:self options:nil];
        cell=[cellArray objectAtIndex:0];
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone]; 
    }

    if (indexPath.section==PHONE_DETAIL_SECTION) {

        cell.lblName.text=(NSString*)[APP_DELGATE.phonenumberDetailLabelArray objectAtIndex:indexPath.row];

        cell.lblValue.numberOfLines = 0;
        CGSize suggestedSize = [[APP_DELGATE.phonenumberDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];
        NSLog(@" 222222 suggested size height ph no => %f",suggestedSize.height);
        cell.lblValue.frame = CGRectMake(cell.lblValue.frame.origin.x, cell.lblValue.frame.origin.y, cell.lblValue.frame.size.width, suggestedSize.height);

        cell.lblValue.text=(NSString*)[APP_DELGATE.phonenumberDetailArray objectAtIndex:indexPath.row];
    }

    else if(indexPath.section==EMAIL_DETAIL_SECION) {

        cell.lblName.text=(NSString*)[APP_DELGATE.emailLabelDetailArray objectAtIndex:indexPath.row];

        cell.lblValue.numberOfLines = 0;

        CGSize suggestedSize = [[APP_DELGATE.emailDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];
        cell.lblValue.frame = CGRectMake(cell.lblValue.frame.origin.x, cell.lblValue.frame.origin.y, cell.lblValue.frame.size.width, suggestedSize.height);

        cell.lblValue.text=(NSString*)[APP_DELGATE.emailDetailArray objectAtIndex:indexPath.row];

    }

    else if(indexPath.section==URL_DETAIL_SECTION) {

        cell.lblName.text=(NSString*)[APP_DELGATE.urlLabelDetailArray objectAtIndex:indexPath.row];

        cell.lblValue.numberOfLines = 0;
        CGSize suggestedSize = [[APP_DELGATE.urlDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];
        NSLog(@" 222222 suggested size height url => %f",suggestedSize.height);
        cell.lblValue.frame = CGRectMake(cell.lblValue.frame.origin.x, cell.lblValue.frame.origin.y, cell.lblValue.frame.size.width, suggestedSize.height);

        cell.lblValue.text=(NSString*)[APP_DELGATE.urlDetailArray objectAtIndex:indexPath.row];

    }

    else if (indexPath.section==ADDRESS_DETAIL_SECTION) {

        cell.lblName.text=(NSString*)[APP_DELGATE.addressDetailLabelArray objectAtIndex:indexPath.row];

        cell.lblValue.numberOfLines = 0;
        CGSize suggestedSize = [[APP_DELGATE.addressDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

         cell.lblValue.frame = CGRectMake(cell.lblValue.frame.origin.x, cell.lblValue.frame.origin.y, cell.lblValue.frame.size.width, suggestedSize.height);

         cell.lblValue.text = (NSString*)[APP_DELGATE.addressDetailArray objectAtIndex:indexPath.row];        
    }

    else if(indexPath.section==BIRTHDAY_DETAIL_SECTION) {

        NSString *birthdateStringLocal=[ContactDetails getBirthDate:record];
        cell.lblName.text=BIRTHDAY_LABEL;

        cell.lblValue.text=birthdateStringLocal;
    }

    else if(indexPath.section==NOTE_DETAIL_SECTION) {

        cell.lblName.text=NOTES_LABEL;
        cell.lblValue.numberOfLines = 0;
        CGSize suggestedSize = [noteString sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];
        cell.lblValue.frame = CGRectMake(cell.lblValue.frame.origin.x, cell.lblValue.frame.origin.y, cell.lblValue.frame.size.width, suggestedSize.height);

        cell.lblValue.text=noteString;

    }

    return cell;
}


-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.section==PHONE_DETAIL_SECTION){

        CGSize suggestedSize = [[APP_DELGATE.phonenumberDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"1111111suggested size height Phone no=> %f",suggestedSize.height);
        return suggestedSize.height + MARGIN_SIZE;
    }

    else if (indexPath.section==ADDRESS_DETAIL_SECTION){

        CGSize suggestedSize = [[APP_DELGATE.addressDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"1111111suggested size height Address=> %f",suggestedSize.height);
        return suggestedSize.height + MARGIN_SIZE;
    }

    else if (indexPath.section==EMAIL_DETAIL_SECION){

        NSLog(@"String 1111: %@", [APP_DELGATE.emailDetailArray objectAtIndex:indexPath.row]);

        CGSize suggestedSize = [[APP_DELGATE.emailDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"1111111suggested size height Email=> %f",suggestedSize.height);
        return suggestedSize.height + MARGIN_SIZE;
    }

    else if (indexPath.section == NOTE_DETAIL_SECTION){
        CGSize suggestedSize = [noteString sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"1111111suggested size height NOTES=> %f",suggestedSize.height);
        return suggestedSize.height + MARGIN_SIZE;
    }

    else if (indexPath.section == URL_DETAIL_SECTION){
        CGSize suggestedSize = [[APP_DELGATE.urlDetailArray objectAtIndex:indexPath.row] sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(CONSTRAINT_WIDTH, LONG_LONG_MAX) lineBreakMode:UILineBreakModeWordWrap];

        NSLog(@"1111111suggested size height URL=> %f",suggestedSize.height);
        return suggestedSize.height + MARGIN_SIZE;
    }
    else 
        return 50;
}
我是地址和注释的动态表格单元格高度,但不适用于电子邮件、电话号码、URL。如果电话号码或url足够长,则不会显示任何内容。 请看下面的截图


感谢您的任何帮助。谢谢。

我认为发生这种情况是因为您给出的约束宽度为320.0f,我认为大约为200.0f,所以进行此更改,然后查看结果。我认为您的问题已得到解决。
更多人认为,将其用于值标签
cell.lblValue.lineBreakMode=UILineBreakModeWordWrap

非常感谢。。。只需更改约束宽度,它就能完美工作。您能告诉我为什么需要设置cell.lblValue.lineBreakMode=UILineBreakModeWordWrap?因为我已经设置了cell.lblValue.numberOfLines=0。因为默认的
UILineBreakMode
被设置为
UILineBreakModeTailTruncation
,所以如果你想链接按字中断,你必须使用这个。