最近遇到了一个问题, 就是在做UILabel显示文字的时候, 会出现label文字左右参差不齐的现象 如图1所示.

这样就会很影响文字的美观, 那么如何解决这个label不齐的现象呢, 就目前而言, 我知道两种方法:
第一种方法是使用YYLabel, 原理是使用coreText重新绘制文字, 但是这样写起来是比较麻烦的, 因为步骤很多.
第二种方法是用富文本 设置左右对齐代码如下
NSString *str2 = @"😝😝而“散文”一词大概出现在北宋太平兴国(976年十二月—984年十一月)时期。《辞海》认为[1] :中国六😝😝朝以来,为区别于韵文和骈文,把凡不押韵、不重排偶的散体文章,包括经传史书在内,概称“😝😝散文”。后又泛😝指诗歌[2] 以外的所有文学体裁。😝";
NSMutableAttributedString *mstr = [[NSMutableAttributedString alloc]initWithString:str2];
NSMutableParagraphStyle *par = [[NSMutableParagraphStyle alloc]init];
par.alignment = NSTextAlignmentJustified;
NSDictionary *dic = @{NSParagraphStyleAttributeName : par,
NSFontAttributeName : [UIFont systemFontOfSize:15],
NSUnderlineStyleAttributeName : [NSNumber numberWithInteger:NSUnderlineStyleNone]};
[mstr setAttributes:dic range:NSMakeRange(0, mstr.length)];
//计算字数来确定label大小 (自定义类目)
CGSize size2 = [NSString sizeWithText:str2 maxSize:CGSizeMake(300, MAXFLOAT) font:[UIFont systemFontOfSize:15] lineSpan:0];
UILabel *label2 = [[UILabel alloc]initWithFrame:CGRectMake(([UIScreen mainScreen].bounds.size.width - 300) / 2, 300, 300, size2.height)];
[self.view addSubview:label2];
label2.numberOfLines = 0;
label2.backgroundColor = [UIColor redColor];
label2.textAlignment = NSTextAlignmentLeft;
label2.adjustsFontSizeToFitWidth = YES;
label2.attributedText = mstr;
其中关键性的是两句代码:
1.这句代码的意思是设置文字左右对齐
par.alignment = NSTextAlignmentJustified;
2.这句代码的作用是添加下划线 并设置枚举为NSUnderlineStyleNone(没有下划线), 如果不设置这句左右对齐就无法实现.
NSUnderlineStyleAttributeName : [NSNumber numberWithInteger:NSUnderlineStyleNone]
补充:
1.自定义类目代码
- (CGSize)sizeOfTextWithMaxSize:(CGSize)maxSize font:(UIFont *)font lineSpan:(NSInteger)lineSpan
{
NSDictionary *atts = nil;
if (lineSpan != 0) {
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
style.lineSpacing = lineSpan;
atts = @{NSFontAttributeName : font, NSParagraphStyleAttributeName : style};
}else{
atts = @{NSFontAttributeName : font};
}
return [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:atts context:nil].size;
}
+ (CGSize)sizeWithText:(NSString *)text maxSize:(CGSize)maxSize font:(UIFont *)font lineSpan:(NSInteger)lineSpan
{
return [text sizeOfTextWithMaxSize:maxSize font:font lineSpan:lineSpan];
}
2.当你做完上述步骤就会发现你的label已经可以左右对齐了 效果如图2所示, 上面是未对齐, 下面是对齐后, 可以明显的看出下面的文字比上面整齐很多.

网友评论