Custom UITableView Dynamic Cell Height

前端 未结 6 639
一个人的身影
一个人的身影 2021-02-06 09:22

I have search and searched through endless blogs and articles on how to determine a dynamic height for a custom UITableViewCell and its detailed text. I have really had a hard t

6条回答
  •  太阳男子
    2021-02-06 09:54

    I tried many solutions, but the one that worked was this, suggested by a friend:

    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    
        int height = [StringUtils findHeightForText:yourLabel havingWidth:yourWidth andFont:[UIFont systemFontOfSize:17.0f]];
    
        height += [StringUtils findHeightForText:yourOtherLabel havingWidth:yourWidth andFont:[UIFont systemFontOfSize:14.0f]];
    
        return height + CELL_SIZE_WITHOUT_LABELS; //important to know the size of your custom cell without the height of the variable labels
    }
    

    The StringUtils.h class:

     #import 
    
        @interface StringUtils : NSObject
    
        + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font;
    
        @end
    

    StringUtils.m class:

        #import "StringUtils.h"
    
        @implementation StringUtils
    
        + (CGFloat)findHeightForText:(NSString *)text havingWidth:(CGFloat)widthValue andFont:(UIFont *)font {
            CGFloat result = font.pointSize+4;
            if (text) {
                CGSize size;
    
                CGRect frame = [text boundingRectWithSize:CGSizeMake(widthValue, CGFLOAT_MAX)
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{NSFontAttributeName:font}
                                                  context:nil];
                size = CGSizeMake(frame.size.width, frame.size.height+1);
                result = MAX(size.height, result); //At least one row
            }
            return result;
        }
    
        @end
    

    It worked perfectly for me. I had a Custom Cell with 3 images with fixed sizes, 2 labels with fixed sizes and 2 variable labels. Worked like a charm. Hope it works for you too.

    Best regards, Alexandre.

提交回复
热议问题