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;
}