NSMutableParagraphStyle *muStyle = [[NSMutableParagraphStyle alloc]init];
muStyle.lineSpacing=3;//设置行间距离
muStyle.alignment = NSTextAlignmentLeft;//对齐方式
NSMutableAttributedString *attrString = [[NSMutableAttributedString alloc] initWithString:adWord];
[attrStringaddAttribute:NSFontAttributeNamevalue:MaterialFontrange:NSMakeRange(0, attrString.length)];
[attrStringaddAttribute:NSParagraphStyleAttributeNamevalue:muStylerange:NSMakeRange(0, attrString.length)];
NSDictionary *attributes = @{NSFontAttributeName:MaterialFont,NSParagraphStyleAttributeName:muStyle};
CGFloat h = [adWord boundingRectWithSize:CGSizeMake(kScreenWidth - 20*2, CGFLOAT_MAX)
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading
attributes:attributescontext:nil].size.height;
外传1:
等你看到这些,估计会很开心。
但是,你就会发现直接用这高度去显示label,会发现有那么一行偶尔显示不出来
原因在float与int的问题了
我的做法
height= (int)h +1;
外传2:
文本高度 = 单行高度 + 行间距 + 单行高度 + 间距 + ... + 单行高度
值得注意的是,这个单行高度并不是等于字体的大小
比如我 苹方常规体13,它的行高18.2,哈哈
外传3:
有时候你会发现,后台返回的字符串本来是一行的,但是你计算出来却是两行或三行,很疑惑,很诡异。
我的遭遇:后台返回的字符串中,包含了换行符。因为返回的数据打印出来是\nBTC\U51fa\U73b0\U4ef7\U503c\U7ea62451\U4e07\U7f8e\U5这样子的,所以很难发现有换行符。
tip:换行符计算也会占有高度,尤其是设置了行高,占据的高度也会更大。