在 UILabel 中,有使用不同截断技术 (UILineBreakMode) 截断标签的功能。在 NSString UIKit Additions 中,有一个类似的绘制字符串的功能。
但是,我发现无法访问实际截断的字符串。有没有其他方法可以根据给定字体的(图形)宽度获取截断的字符串?
我想用这个方法在 NSString 上创建一个类别:
-(NSString*)stringByTruncatingStringWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
最佳答案
- (NSString*)stringByTruncatingStringWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode {
NSMutableString *resultString = [[self mutableCopy] autorelease];
NSRange range = {resultString.length-1, 1};
while ([resultString boundingRectWithSize:CGSizeMake(FLT_MAX, FLT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:attributes context:nil].size.width > width) {
// delete the last character
[resultString deleteCharactersInRange:range];
range.location--;
// replace the last but one character with an ellipsis
[resultString replaceCharactersInRange:range withString:truncateReplacementString];
}
return resultString;
}
请注意,从 iOS 6 开始,此方法在后台线程上运行不再安全。
关于ios - 如何根据图形宽度截断 NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2266396/