如何用另一个属性字符替换UILabel
iOS 7中 a 的截断省略号(“...”)?例如,带有彩色的“>”。
我希望 Text KitNSLayoutManager
能让这成为可能,但如果 UILabel 使用它,它似乎不会将其公开。
另外,我可以安全地假设在每个本地化中都使用省略号作为截断字符吗?也许不同的语言有不同的截断字符。
如何用另一个属性字符替换UILabel
iOS 7中 a 的截断省略号(“...”)?例如,带有彩色的“>”。
我希望 Text KitNSLayoutManager
能让这成为可能,但如果 UILabel 使用它,它似乎不会将其公开。
另外,我可以安全地假设在每个本地化中都使用省略号作为截断字符吗?也许不同的语言有不同的截断字符。
我建议您使用TTTAttributedLabel,只需将属性“attributedTruncationToken”设置为您的自定义字符串。
我不认为它可以让你访问这个。我想你会手动处理它。例如,使用 TextKit 确定字符串的大小,如果它不适合可用区域,请自行截断并附加一个“>”,然后将新字符串放入标签中。
NSAttributedString 有获取字符串大小的方法。
让我知道您是否需要有关此的更多详细信息..?
我认为您可以在Fonix-replaceElipsesForLabel
提供的方法中进行一些自定义以获得您想要的结果。
I have written a method to do it, and works in iOS7
-(void)setCustomEllipsis:(NSString*)customEllipsis inLabel:(UILabel*)label with:(NSString*)string{
//Replace the ellipsis
NSMutableString* result = [[NSMutableString alloc] initWithString:@""];
NSArray* strings = [string componentsSeparatedByString:@" "];
for (NSString* s in strings) {
CGRect newSize = [[NSString stringWithFormat:@"%@%@%@",result,s,customEllipsis] boundingRectWithSize:CGSizeMake(label.frame.size.width,0) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:label.font} context:nil];
if (newSize.size.height < label.frame.size.height) {
[result appendString:s];
[result appendString:@" "];
}else{
[result appendString:customEllipsis];
break;
}
}
[label setText:result];
//Set different font to the ellipsis
const CGFloat fontSize = 13;
UIFont *boldFont = [UIFont boldSystemFontOfSize:fontSize];
UIFont *regularFont = [UIFont systemFontOfSize:fontSize];
UIColor *foregroundColor = [UIColor lightGrayColor];
NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:regularFont, NSFontAttributeName,foregroundColor, NSForegroundColorAttributeName, nil];
NSDictionary *subAttrs = [NSDictionary dictionaryWithObjectsAndKeys:boldFont, NSFontAttributeName, nil];
const NSRange range = [label.text rangeOfString:customEllipsis];
NSMutableAttributedString *attributedText = [[NSMutableAttributedString alloc] initWithString:result
attributes:attrs];
[attributedText setAttributes:subAttrs range:range];
[label setAttributedText:attributedText];
}