Dynamically change UITable cell height?

后端 未结 5 1519
心在旅途
心在旅途 2021-01-01 05:44

I need to resize the cell height based on the content size/length.tried several methods, which one gives the exact height without overlapping?

相关标签:
5条回答
  • 2021-01-01 06:29

    Sample you can edit and try

     - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath         *)indexPath {
    
    NSDictionary *itemAtIndex = (NSDictionary *)[chatQuestions objectAtIndex:indexPath.row];
    
    if ([self sizeForText:[itemAtIndex objectForKey:@"text"]].height+20>50) {
        return [self sizeForText:[itemAtIndex objectForKey:@"text"]].height+20;
    }
    else{
        return 50;}
    
    
    
    }
    
     -(CGSize)sizeForText:(NSString*)text
      {
    
    
    CGSize constraintSize;
    
    constraintSize.width = 190.0f;
    
    constraintSize.height = MAXFLOAT;
    UIFont *labelFont = [UIFont fontWithName:@"Noteworthy-Light" size:18];
    
    CGSize stringSize =[text sizeWithFont:labelFont constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap];
    
    return stringSize;
    }
    
    0 讨论(0)
  • 2021-01-01 06:33

    In your case you need to set the height of cell based on the label.

    Check the link :

    http://dcraziee.wordpress.com/2013/05/22/calculate-size-of-uillabel-base-on-text-in/

    There is a function named

    -(CGFloat)getHeightForLabel:(NSString *)_str font:(UIFont *)fontOfObject
    

    Use that function to calculate height as :

    -(float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        CGFloat _height  = [self getHeightForLabel:self.label.text font:[self.label font]];
        return _height;
    }
    
    0 讨论(0)
  • 2021-01-01 06:42
    //Calculate the expected size based on the font and linebreak mode of your label
    CGSize maximumLabelSize = CGSizeMake(296,9999);
    
    CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   
    
    //adjust the label the the new height.
    CGRect newFrame = yourLabel.frame;
    newFrame.size.height = expectedLabelSize.height;
    yourLabel.frame = newFrame;
    
    0 讨论(0)
  • 2021-01-01 06:46

    see this tutorial for change UITableViewCell Height Dynamically..

    Resizing-A-UITableViewCell

    and also use this tutorial..

    uitableviewcell-dynamic-height

    also use tableView:heightForRowAtIndexPath: method for set height of cell with indexpath

    0 讨论(0)
  • 2021-01-01 06:49

    This is from my previous answer - Customizing UITableViewCell's height:

    Use this method to get the text height of the text

    -(CGFloat)getLabelHeightForText:(NSString *)text andWidth:(CGFloat)labelWidth
    {
    
    CGSize maximumSize = CGSizeMake(labelWidth, 10000);
    
    //provide appropriate font and font size
    CGSize labelHeighSize = [text sizeWithFont: [UIFont fontWithName:@"Trebuchet MS" size:13.0f]
                             constrainedToSize:maximumSize
                                 lineBreakMode:UILineBreakModeTailTruncation];
    return labelHeighSize.height;
    }
    

    This method will return the height of the text you are passing. Add this method in your class. And use the tableView:heightForRowAtIndexPath: delegate method to set the height for each cell

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
       Feedback *item = [self.items objectAtIndex:indexPath.row];
    
       CGFloat textHeight = [self getLabelHeightForText:item.comment andWidth:162];//give your label width here
        return textHeight;
    }    
    
    0 讨论(0)
提交回复
热议问题