本文介绍了TableViewCell根据Xcode中的内容自动调整其高度?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要根据其中的内容设置 tableViewCell 的高度.我在 tableViewCell 中有一些动态高度的标签,标签中的行数不是恒定的.有时,如果一个标签的文本为 null ,则另一个标签可能会占据其位置.所以我需要的是 tableViewCell 是否应该根据内容 autoresize 的高度?

I need to set the height of tableViewCell according to content in it. I have some labels of dynamic height in tableViewCell,number of lines in the label is not constant. Sometimes if a one label's text is null then the other label may occupy its position. So what i need is tableViewCell should autoresize height according to the content?

-(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 的标签的最后几行.

Here i have given it to be 205 .but when the text in the tableViewCell increases then i couldn't see the last lines of the label of last tableViewCell..

如何使 tableViewCell 对其高度进行自动调整大小?

推荐答案

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

You can just check for you textHeight and then set your row height

- (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;
}

如果文本为null,则将其从数组中移除,或者仅将高度传递给零..:)

and if text is null then remove it from array dear or just pass height to zero..:)

这篇关于TableViewCell根据Xcode中的内容自动调整其高度?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-10 15:27