TableViewCell根据xcode中的内容自动调整其高度?

时间:2012-12-01 05:53:44

标签: iphone xcode uitableview

我需要根据其中的内容设置tableViewCell的高度。我在tableViewCell中有一些动态高度标签,标签中的行数不是常数。有时,如果一个标签的文本为null,则另一个标签可能占据其位置。那么我需要的是tableViewCell根据内容应该autoresize身高吗?

-(void)viewDidLoad
{
self.tableView=[[UITableView alloc] initWithFrame:CGRectMake(0,150,327,[array count]*205) style:UITableViewStylePlain];
                self.tableView.delegate=self;
                self.tableView.dataSource=self;
                self.tableView.scrollEnabled = NO;
                [self.view addSubview:self.tableView];

                float fscrview = 150 + self.tableView.frame.size.height + 20;
                testscroll.contentSize=CGSizeMake(320, fscrview);
}


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

        return [array count];
    }

-(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 *name1 = [[UILabel alloc] initWithFrame:CGRectZero];
            name1.tag = 111;
            name1.backgroundColor = [UIColor clearColor];
            [name1 setFont:[UIFont fontWithName:@"Helvetica-Bold" size:14]];
            [name1 setLineBreakMode:UILineBreakModeWordWrap];
            [cell addSubview:name1];

            UILabel *code = [[UILabel alloc] initWithFrame:CGRectZero];
            codetype.tag = 112;
            codetype.backgroundColor = [UIColor clearColor];
            [codetype setFont:[UIFont fontWithName:@"Helvetica" size:12]];
            [codetype setLineBreakMode:UILineBreakModeWordWrap];
            [cell addSubview:codetype];

            line1 = [[UILabel alloc] initWithFrame:CGRectZero];
            line1.tag = 113;
            line1.backgroundColor = [UIColor clearColor];
            [line1 setFont:[UIFont fontWithName:@"Helvetica" size:12]];
            [line1 setLineBreakMode:UILineBreakModeWordWrap];
            [cell addSubview:line1];


            line3 = [[UILabel alloc] initWithFrame:CGRectZero];
            line3.tag = 114;
            line3.backgroundColor = [UIColor clearColor];
            [line3 setFont:[UIFont fontWithName:@"Helvetica" size:12]];
            [line3 setLineBreakMode:UILineBreakModeWordWrap];
            [cell addSubview:line3];

            city = [[UILabel alloc] initWithFrame:CGRectZero];
            city.tag = 115;
            city.backgroundColor = [UIColor clearColor];
            [city setFont:[UIFont fontWithName:@"Helvetica" size:12]];
            [city setLineBreakMode:UILineBreakModeWordWrap];
            [cell addSubview:city];



        }

        cell.accessoryType= UITableViewCellAccessoryDetailDisclosureButton;
        NSMutableDictionary *d =[[NSMutableDictionary alloc]initWithDictionary: [arr2 objectAtIndex:indexPath.row]];


        NSString *name2 = [d  objectForKey:@"Name"];
        CGSize constraint1 = CGSizeMake(175, 2000.0f);
        CGSize size1 = [name2 sizeWithFont: [UIFont fontWithName:@"Helvetica-Bold" size:14] constrainedToSize:constraint1 lineBreakMode:UILineBreakModeWordWrap];
        UILabel *name1 = (UILabel *)[cell viewWithTag:111];
        name1.frame = CGRectMake(105,25, 175, size1.height);
        [name1 setNumberOfLines:size1.height/16];
        name1.text = [d  objectForKey:@"Name"];
        [name1 setTextColor:UIColorFromRGB(COLOR_BLUE)];


        NSString *codetype2 = [d  objectForKey:@"Type"];
        CGSize constraint2 = CGSizeMake(175, 2000.0f);
        CGSize size2 = [codetype2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint2 lineBreakMode:UILineBreakModeWordWrap];
        UILabel *codetype1 = (UILabel *)[cell viewWithTag:112];
        codetype1.frame = CGRectMake(105,name1.frame.size.height+25, 175, size2.height);
        [codetype1 setNumberOfLines:size2.height/16];
        codetype1.text=[d objectForKey:@"CodeType"];

        NSString *line2 = [d  objectForKey:@"Line1"];
        NSString *line4 = [d  objectForKey:@"Line2"];

        if([line2 isEqualToString:@""])
        {
            if([line4 isEqualToString:@""])
            {
                NSString *city2 = [d  objectForKey:@"City"];
                CGSize constraint4 = CGSizeMake(175, 2000.0f);
                CGSize size4 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
               city = (UILabel *)[cell viewWithTag:115];
                city.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size4.height);
                [city setNumberOfLines:0];
                city.text = [d  objectForKey:@"City"];
            }
            else
            {
                NSString *line4 = [d  objectForKey:@"Line2"];

                CGSize constraint4 = CGSizeMake(175, 2000.0f);
                CGSize size4 = [line4 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
                line3 = (UILabel *)[cell viewWithTag:114];
                line3.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size4.height);
                [line3 setNumberOfLines:0];
                line3.text = [d  objectForKey:@"Line2"];


                NSString *city2 = [d  objectForKey:@"City"];
                CGSize constraint5 = CGSizeMake(175, 2000.0f);
                CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
                city = (UILabel *)[cell viewWithTag:115];
                city.frame = CGRectMake(105,line3.frame.size.height+line3.frame.origin.y, 175, size5.height);
                [city setNumberOfLines:0];
                city.text = [d  objectForKey:@"City"];





            }


        }
        else
        {
            NSString *line2 = [d  objectForKey:@"Line1"];
            CGSize constraint3 = CGSizeMake(175, 2000.0f);
            CGSize size3 = [line2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint3 lineBreakMode:UILineBreakModeWordWrap];
            line1 = (UILabel *)[cell viewWithTag:113];
            line1.frame = CGRectMake(105,codetype1.frame.size.height+codetype1.frame.origin.y, 175, size3.height);
            [line1 setNumberOfLines:0];
            line1.text = [d  objectForKey:@"Line1"];

            if([line4 isEqualToString:@""])
            {
                NSString *city2 = [d  objectForKey:@"City"];
                CGSize constraint5 = CGSizeMake(175, 2000.0f);
                CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
               city = (UILabel *)[cell viewWithTag:115];
                city.frame = CGRectMake(105,line1.frame.size.height+line1.frame.origin.y, 175, size5.height);
                [city setNumberOfLines:0];
                city.text = [d  objectForKey:@"City"];
            }
            else
            {
                NSString *line4 = [d  objectForKey:@"Line2"];

                CGSize constraint4 = CGSizeMake(175, 2000.0f);
                CGSize size4 = [line4 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint4 lineBreakMode:UILineBreakModeWordWrap];
                line3 = (UILabel *)[cell viewWithTag:114];
                line3.frame = CGRectMake(105,line1.frame.size.height+line1.frame.origin.y, 175, size4.height-3);
                [line3 setNumberOfLines:0];
                line3.text = [d  objectForKey:@"Line2"];



                NSString *city2 = [d  objectForKey:@"City"];
                CGSize constraint5 = CGSizeMake(175, 2000.0f);
                CGSize size5 = [city2 sizeWithFont: [UIFont fontWithName:@"Verdana" size:12] constrainedToSize:constraint5 lineBreakMode:UILineBreakModeWordWrap];
                city = (UILabel *)[cell viewWithTag:115];
                city.frame = CGRectMake(105,line3.frame.size.height+line3.frame.origin.y+4, 175, size5.height);
                [city setNumberOfLines:0];
                city.text = [d  objectForKey:@"City"];



            }



        }



        UILabel *state=[[UILabel alloc]initWithFrame:CGRectMake(105,city.frame.size.height+city.frame.origin.y+5,320,10)];
        state.font=[UIFont fontWithName:@"Helvetica" size:12];
        [state setTextAlignment:UITextAlignmentLeft];
        [state setText:[d valueForKey:@"State"]];
        state.tag=116;
        [cell addSubview:state];
        [state release];

}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

        return 1;


}   
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section {
 UIView *sectionHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, tableView.bounds.size.width, tableView.sectionHeaderHeight)];
    sectionHeaderView.backgroundColor = [UIColor colorWithWhite:0 alpha:0];
    sectionHeaderView.userInteractionEnabled = YES;
    sectionHeaderView.tag = section;


    UILabel *headerLabel = [[UILabel alloc] initWithFrame:CGRectMake(12,2, tableView.bounds.size.width-10, 18)];
    headerLabel.backgroundColor = [UIColor whiteColor];
    [headerLabel setTextAlignment:UITextAlignmentCenter];
    headerLabel.textColor = [UIColor grayColor];
    headerLabel.shadowColor = [UIColor darkGrayColor];
    headerLabel.shadowOffset = CGSizeMake(0, 1);
    headerLabel.font = [UIFont boldSystemFontOfSize:18];
    headerLabel.text = @"Details";


    [sectionHeaderView addSubview:headerLabel];

    return sectionHeaderView;
    }

我在这里给它205.但是当tableViewCell中的文字增加时,我看不到最后tableViewCell标签的最后几行..

如何让tableViewCell升至auto-resize高度?

2 个答案:

答案 0 :(得分:1)

您可以在– tableView:heightForRowAtIndexPath:中指定单元格的高度。

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    CGFloat height=60;  //set default row height
    if(check_for_the_rows_which_need_increased_height) {
        height+=50;   //Add appropriate increase
    }
    return height;
}

您需要致电[yourTableView reloadData][yourTableView reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationAutomatic]以便再次调用上述方法。

答案 1 :(得分:1)

您可以检查textHeight,然后设置行高

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;
{
  NSString *Yourtext = [yourTextAry objectAtIndex:[indexPath row]];

  CGSize constraint = CGSizeMake(yourLabelWidth , 20000.0f);

  CGSize size = [Yourtext sizeWithFont: [UIFont fontWithName:@"Verdana" size:13] constrainedToSize:constraint lineBreakMode:UILineBreakModeWordWrap];

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

  return height;
}

如果text为null,则将其从数组dear中删除,或者只将高度传递给零..:)