UILabel 解决标点挂靠问题

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

就是每一行文字间距自适应,能解决标点挂靠问题

你可能感兴趣的:(UILabel 解决标点挂靠问题)