UILabel 或者 textView 的标点挂靠问题,(每一行最后一个子符是标点符号, label 自动换行)这个问题会是 label 显示的长短不一,不好看,另一个就是计算高度的时候,有可能会出现问题,比如,计算的高度为三行高度,恰巧遇到了标点挂靠的问题, label 换行了,变成了4行,这样 label 显示就会出现问题.
解决方法:
label 设置和计算 label 高度
1,带有行间距的label 设置
- (void)setText:(NSString*)text lineSpacing:(CGFloat)lineSpacing {
if (lineSpacing < 0.01 || !text) {
self.text = text;
return;
}
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:text];
[attributedString addAttribute:NSFontAttributeName value:self.font range:NSMakeRange(0, [text length])];
NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:lineSpacing];
[paragraphStyle setLineBreakMode:NSLineBreakByCharWrapping];
[paragraphStyle setAlignment:NSTextAlignmentJustified];
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [text length])];
self.attributedText = attributedString;
}
2,计算高度
+ (CGFloat)text:(NSString*)text heightWithFontSize:(CGFloat)fontSize width:(CGFloat)width lineSpacing:(CGFloat)lineSpacing {
CGFloat tempHeight = 0;
UILabel* label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, width, MAXFLOAT)];
label.font = [UIFont systemFontOfSize:fontSize];
label.numberOfLines = 0;
[label setText:text lineSpacing:lineSpacing];
[label sizeToFit];
tempHeight = label.height;
if (tempHeight < fontSize*2) { //一行
tempHeight = fontSize;
}
return tempHeight;
}
总结
需要注意的是, label 高度的计算和设置需要使用相同的设置,比如行间距,字体大小,这样计算出来的才是准确的.
[paragraphStyle setAlignment:NSTextAlignmentJustified];
NSTextAlignmentJustified
就是每一行文字间距自适应,能解决标点挂靠问题