iOS UILabel字間距適應寬度

原文:http://www.itdecent.cn/p/2b1620944a90

效果如下:


image.png

給UILabel寫一個分類:

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

@interface UILabel (AutoSpace)

//兩端對齊
- (void)textAlignmentLeftAndRight;

- (void)textAlignmentLeftAndRightWith:(CGFloat)labelWidth;

@end

NS_ASSUME_NONNULL_END
#import "UILabel+AutoSpace.h"
#import <CoreText/CoreText.h>

@implementation UILabel (AutoSpace)

- (void)textAlignmentLeftAndRight {
    [self textAlignmentLeftAndRightWith:CGRectGetWidth(self.frame)];
}

- (void)textAlignmentLeftAndRightWith:(CGFloat)labelWidth {
    if (self.text == nil || self.text.length == 0) {
        return;
    }
    
    CGSize size = [self.text boundingRectWithSize:CGSizeMake(labelWidth, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:self.font} context:nil].size;
    NSInteger length = (self.text.length - 1);
    NSString *lastStr = [self.text substringWithRange:NSMakeRange(self.text.length - 1,1)];
    if ([lastStr isEqualToString:@":"] || [lastStr isEqualToString:@":"]) {
        length = (self.text.length - 2);
    }
    CGFloat margin = (labelWidth - size.width) / length;
    NSNumber *number = [NSNumber numberWithFloat:margin];
    NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc]initWithString:self.text];
    [attribute addAttribute:NSKernAttributeName value:number range:NSMakeRange(0, length)];
    self.attributedText = attribute;
}

@end

在設置完label的frame、text、font等屬性后再調(diào)用:

[myLabel textAlignmentLeftAndRight];
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容