估算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;
****