UITableViewCell with dynamic height iOS

前端 未结 12 2318
日久生厌
日久生厌 2020-11-27 17:54

I have implemented TableView with CustomCell in my app,

I want dynamic height of my UITableViewCell according to text length in UITableViewCell

12条回答
  •  無奈伤痛
    2020-11-27 18:51

    The following code worked fine for me.Try with this

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        CGFloat lRetval = 10;
        CGSize maximumLabelSize = CGSizeMake(231, FLT_MAX);
        CGSize expectedLabelSize;
    
    
        CGFloat numberoflines = [thirdcellText length]/17.0;
    
        if (indexPath.section == 0) {
            expectedLabelSize = [firstcellText sizeWithFont:[UIFont systemFontOfSize:16.0]
                                          constrainedToSize:maximumLabelSize
                                              lineBreakMode:NSLineBreakByWordWrapping];
            lRetval = expectedLabelSize.height;
        }
        else if(indexPath.section == 1)
        {
            expectedLabelSize = [secondcellText sizeWithFont:[UIFont systemFontOfSize:16.0]
                                           constrainedToSize:maximumLabelSize
                                               lineBreakMode:NSLineBreakByWordWrapping];
            lRetval = expectedLabelSize.height;
        }
        else if (indexPath.section == 2)
        {
            expectedLabelSize = [thirdcellText sizeWithFont:[UIFont systemFontOfSize:16.0]
                                           constrainedToSize:CGSizeMake(231, numberoflines*17.0)
                                               lineBreakMode:NSLineBreakByWordWrapping];
            lRetval = expectedLabelSize.height-128.0;
        }
    
        UIImage *factoryImage = [UIImage imageNamed:NSLocalizedString(@"barcode_factory_reset.png", @"")];
    
        CGFloat height = factoryImage.size.height;
    
        if (lRetval < height) {
            lRetval = height+15.0;
        }
    
        return lRetval;
    }
    

    Try to add the following code in your customcell class autolayout method

    textview.frame = frame;
    CGRect frame1 = textview.frame;
    frame1.size.height = textview.contentSize.height-2;
    textview.frame = frame1;
    
    
    textview.contentSize = CGSizeMake(textview.frame.size.width, textview.frame.size.height);
    
    labelPtr.frame = CGRectMake(CGRectGetMinX(imageView.frame)+CGRectGetMaxX(imageView.frame)+5.0, textview.frame.size.height+10.0, 140, 16.0);
    [labelPtr setNeedsDisplayInRect:labelPtr.frame];
    

    Try to set the label properties like the following

    labelPtr = [[UILabel alloc] initWithFrame:CGRectZero];
    labelPtr.backgroundColor =[UIColor clearColor];
    [labelPtr setNeedsLayout];
    [labelPtr setNeedsDisplay];
    [self.contentView addSubview:labelPtr];
    

提交回复
热议问题