多行垂直顯示的UILabel文字兩端對(duì)齊
在開發(fā)中我們會(huì)遇到這樣的UI,需要我們對(duì)齊字?jǐn)?shù)不同的標(biāo)題:

對(duì)齊.jpg
我的思路是需要知道:
·當(dāng)前l(fā)abel與最長(zhǎng)lable文字之間的文字?jǐn)?shù)量差num
·然后計(jì)算出差一個(gè)字的差距值singleValue
·通過(guò)設(shè)置label的attributedText來(lái)填充當(dāng)前l(fā)abel與最長(zhǎng)label的總差距
1.計(jì)算出差一個(gè)字的差距值singleValue
#import "CoreText/CoreText.h"
CGFloat singleValue = [@"好" boundingRectWithSize:CGSizeMake(MAXFLOAT, XXAutoLayout(15))
options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine |NSStringDrawingUsesFontLeading
attributes:@{NSFontAttributeName : label.font} context:nil].size.width;
2.根據(jù)label的長(zhǎng)度來(lái)填充差值,
·如上圖最長(zhǎng)lable字?jǐn)?shù)為5(算上冒號(hào))
如果差一個(gè)漢子:
1.因?yàn)榈谝粋€(gè)字和最后兩個(gè)字需要對(duì)齊算上冒號(hào))
·所以需要把差值插入到第一個(gè)字與第二個(gè)字、第二個(gè)字與第三個(gè)字之間
·那么差一個(gè)字總長(zhǎng)度為singleValue * 1,差值插入的位置數(shù)量為2,所以得到代碼:
#import "CoreText/CoreText.h"
NSNumber *number = [NSNumber numberWithFloat:self.onelength / 2];
NSMutableAttributedString *astr = [[NSMutableAttributedString alloc] initWithString:label.text];
// 表示把number插入到第一個(gè)字與第二個(gè)字、第二個(gè)字與第三個(gè)字之間
[astr addAttribute:(id)kCTKernAttributeName value:number range:NSMakeRange(0, 2)];
label.attributedText = astr;
如果差2個(gè)漢子:
2.因?yàn)榈谝粋€(gè)字和最后兩個(gè)字需要對(duì)齊算上冒號(hào))
·所以需要把差值插入到第一個(gè)字與第二個(gè)字之間
·那么差2個(gè)字總長(zhǎng)度為singleValue * 2,差值插入的位置數(shù)量為1,所以得到代碼:
NSNumber *number = [NSNumber numberWithFloat: singleValue * 2];
NSMutableAttributedString *astr = [[NSMutableAttributedString alloc] initWithString:label.text];
// 表示把number插入到第一個(gè)字與第二個(gè)字之間
[astr addAttribute:(id)kCTKernAttributeName value:number range:NSMakeRange(0, 1)];
label.attributedText = astr;