UILabel正常显示省略号的做法

1.普通的UILabel,通过如下设置文字过长显示不完会显示省略号:

UILabel *lab = [[UILabel alloc] init];
lab.frame = CGRectMake(0, 0, 100, 20);
lab.numberOfLines = 2;
lab.lineBreakMode = NSLineBreakByTruncatingTail;
lab.text = @"编译器自动管理内存地址,让程序员更加专注于APP的业务。";

2.带属性 attributedText的label,比如带文字间隔功能的Label。在设置完值后需要重新设置一下。
self . titleLabel . lineBreakMode = NSLineBreakByTruncatingTail ;
因为label设置了属性,导致lineBreakMode失效了,不能正常获取到行的高度。

-(void)viewDidLoad
{
    [super viewDidLoad];
     UILabel *lab = [[UILabel alloc] init];
     lab.frame = CGRectMake(0, 0, 100, 20);
     lab.numberOfLines = 2;
     lab.lineBreakMode = NSLineBreakByTruncatingTail;
     NSString *str = @"编译器自动管理内存地址,让程序员更加专注于APP的业务。编译器自动管理内存地址,让程序员更加专注于APP的业务。编译器自动管理内存地址,让程序员更加专注于APP的业务。”;
     NSMutableAttributedString * attributedContentStr = [NSMutableAttributedString           attributedStringWithString:str Font: [UIFont systemFontOfSize:17] LineSpacing:3 MaxWidth:(kScreenWidth - 120)];
     lab.attributedText=attributedContentStr;
     // 因为label设置了属性,导致lineBreakMode失效了,不能正常获取到行的高度。所以需要重新设置一下才能正常显示省略号。
     lab.lineBreakMode = NSLineBreakByTruncatingTail;
     [self.view addSubview:lab];
}

/**
 *  设置带有行间距的文本
 *
 *  @param str         文本
 *  @param font        字号
 *  @param lineSpacing 行间距
 *
 *  @return 属性文本
 */
+(NSMutableAttributedString *)attributedStringWithString:(NSString *)str Font:(UIFont *)font LineSpacing:(NSInteger)lineSpacing MaxWidth:(CGFloat)w
{
    if (!str) {
        str=@"";
    }
    NSDictionary *dict = @{NSFontAttributeName: font};
    CGSize size = [str sizeWithAttributes:dict];
   
    NSMutableAttributedString * attributeTitleStr = [[NSMutableAttributedString alloc] initWithString:str];
    [attributeTitleStr addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, attributeTitleStr.length)];
   
     // 如果大于一行,设置行间距
    if(size.width>w){
        NSMutableParagraphStyle * paragraphStyle1 = [[NSMutableParagraphStyle alloc] init];
        [paragraphStyle1 setLineSpacing:lineSpacing];
        [attributeTitleStr addAttribute:NSParagraphStyleAttributeName value:paragraphStyle1 range:NSMakeRange(0, [attributeTitleStr length])];
    }
    return attributeTitleStr;
}


你可能感兴趣的:(ios笔记)