估算带有行间距 字间距的label高

估算label的高,label中可能包含行间距,字间距,缩进,不同的字体大小等信息

-(CGFloat)estimateLabelHeightwithWidth:(UILabel*)label withSpace:(CGFloat)space withFont:(UIFont*)font withWidth:(CGFloat)width{
    
  NSMutableParagraphStyle *paraStyle = [[NSMutableParagraphStyle alloc] init];
     paraStyle.lineBreakMode = NSLineBreakByCharWrapping;
     paraStyle.alignment = NSTextAlignmentLeft;
     paraStyle.lineSpacing = space;
     paraStyle.hyphenationFactor = 1.0;
     paraStyle.firstLineHeadIndent = 0.0;
     paraStyle.paragraphSpacingBefore = 0.0;
     paraStyle.headIndent = 0;
     paraStyle.tailIndent = 0;
     NSDictionary *dic = @{NSFontAttributeName:font, NSParagraphStyleAttributeName:paraStyle, NSKernAttributeName:@0.0f};
     CGSize size = [label.text boundingRectWithSize:CGSizeMake(width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;
     return size.height;
    
}

4个参数分别为对应的label 指定的space 以及字体信息 还有一个label的宽

****重点说明

重要的事情说三遍,with这个参数,是label的宽 用于xib 通过outlayout生成的label 因为在第一次初始化的时候 是算不出label宽度的。所以会导致计算出现错误。这时候就需要我们用屏幕宽-约束的宽 写死一个with 就可以正确计算。如果用frame 写的label 可以忽略这个参数直接将函数中的这行代码改成如下

     CGSize size = [label.text boundingRectWithSize:CGSizeMake(label.width, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:dic context:nil].size;

****

猜你喜欢

转载自blog.csdn.net/lee727n/article/details/90764838