[iOS] UILabel左右对齐

作者: objcat | 来源:发表于2016-08-18 10:33 被阅读2167次

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

图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所示, 上面是未对齐, 下面是对齐后, 可以明显的看出下面的文字比上面整齐很多.

图2

相关文章

网友评论

  • 流火绯瞳:设置 par.alignment = NSTextAlignmentJustified; 之后,不能再设置UILabel的textAlignment属性,否则也会失效。:joy: 困扰了我半天了,用你的代码没问题,一用我的就不行,最后找到是这个原因。

本文标题:[iOS] UILabel左右对齐

本文链接:https://www.haomeiwen.com/subject/jarvsttx.html