4

如何用另一个属性字符替换UILabeliOS 7中 a 的截断省略号(“...”)?例如,带有彩色的“>”。

我希望 Text KitNSLayoutManager能让这成为可能,但如果 UILabel 使用它,它似乎不会将其公开。

另外,我可以安全地假设在每个本地化中都使用省略号作为截断字符吗?也许不同的语言有不同的截断字符。

4

4 回答 4

2

我建议您使用TTTAttributedLabel,只需将属性“attributedTruncationToken”设置为您的自定义字符串。

于 2015-05-09T14:23:08.700 回答
0

我不认为它可以让你访问这个。我想你会手动处理它。例如,使用 TextKit 确定字符串的大小,如果它不适合可用区域,请自行截断并附加一个“>”,然后将新字符串放入标签中。

NSAttributedString 有获取字符串大小的方法。

让我知道您是否需要有关此的更多详细信息..?

于 2014-01-24T12:44:39.683 回答
0

我认为您可以在Fonix-replaceElipsesForLabel提供的方法中进行一些自定义以获得您想要的结果。

于 2014-01-24T12:53:20.580 回答
-1

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];
}
于 2015-05-05T18:34:12.507 回答