目标需求如图所示
image一开始项目比较着急拿到这个需求直接用最简单粗暴的方式用空格来填充(这个就不介绍了 丢脸)
后来抽出时间来修改这里首先想到使用的是系统的平铺布局
NSTextAlignmentJustified =3, // Fully-justified. The last line in a paragraph is natural-aligned.*
也就是这个对齐方式按照意思应该可以实现不清楚哪里出了问题 导致并不是想象中的样子
第二种方式自己计算文字的边距自己来控制文字的显示于是就诞生了这个类别
/**
label 自动算字间距铺满整个label
@param labelWidth 整体label 的宽度
*/
- (void)labelAlightLeftAndRightWithWidth:(CGFloat)labelWidth{
//计算宽度
CGSize textSize = [self.text boundingRectWithSize:CGSizeMake(MAXFLOAT, self.font.pointSize + 5) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingTruncatesLastVisibleLine | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName :self.font} context:nil].size;
CGFloat margin = (labelWidth - textSize.width)/(self.text.length - 1);
if (margin < 0) margin = 0;
NSNumber *number = [NSNumber numberWithFloat:margin];
NSMutableAttributedString *attribute = [[NSMutableAttributedString alloc]initWithString:self.text];
//字间距 :NSKernAttributeName
[attribute addAttribute:NSKernAttributeName value:number range:NSMakeRange(0, self.text.length - 1)];
self.attributedText = attribute;
}
这个类别 先计算文字完全显示下需要的宽度 然后根据固定宽度计算字间距 然后设置当前label 只要传入的宽度固定就能实现上图中的效果
网友评论