如何将iOS 7中UILabel
的截断省略号(“...”)替换为另一个属性字符?例如,使用彩色“>”。
我希望Text Kit的NSLayoutManager
能够实现这一点,但看起来UILabel如果使用它就不会公开它。
另外,我可以安全地假设在每个本地化中使用省略号作为截断字符吗?也许不同的语言有不同的截断字符。
答案 0 :(得分:2)
我建议你使用TTTAttributedLabel,只需将属性“attributionTruncationToken”设置为自定义字符串。
答案 1 :(得分:0)
我认为它不会让你访问它。我想你会手动处理它。例如,使用TextKit确定字符串的大小,如果它不适合可用区域,请自行截断并添加“>”然后将新字符串放在标签中。
NSAttributedString具有获取字符串大小的方法。
如果您需要更多细节,请告诉我。?
答案 2 :(得分:0)
我认为您可以使用 Fonix 提供的-replaceElipsesForLabel
方法进行自定义,以获得所需的结果。
答案 3 :(得分:-1)
我已经编写了一个方法来实现它,并且可以在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];
}