在UILabel中,有使用不同截断技术(UILineBreakMode)截断标签的功能.在NSString UIKit Additions中,绘制字符串有类似的功能.
但是,我发现无法访问实际的截断字符串.有没有其他方法可以根据给定字体的(图形)宽度获取截断的字符串?
我希望用这种方法在NSString上有一个类别:
-(NSString*)stringByTruncatingStringWithFont:(UIFont *)font forWidth:(CGFloat)width lineBreakMode:(UILineBreakMode)lineBreakMode
Run Code Online (Sandbox Code Playgroud) 我希望我的文本适合特定的矩形,所以我需要一些东西来确定字体大小. 问题已经在一定程度上解决了这个问题,但是它们会进行搜索,这看起来非常低效,特别是如果您希望能够在实时拖动调整大小期间进行计算.以下示例可以改进为二进制搜索并通过约束到高度,但它仍然是搜索.而不是搜索,我如何计算适合矩形的字体大小?
#define kMaxFontSize 10000
- (CGFloat)fontSizeForAreaSize:(NSSize)areaSize withString:(NSString *)stringToSize usingFont:(NSString *)fontName;
{
NSFont * displayFont = nil;
NSSize stringSize = NSZeroSize;
NSMutableDictionary * fontAttributes = [[NSMutableDictionary alloc] init];
if (areaSize.width == 0.0 && areaSize.height == 0.0)
return 0.0;
NSUInteger fontLoop = 0;
for (fontLoop = 1; fontLoop <= kMaxFontSize; fontLoop++) {
displayFont = [[NSFontManager sharedFontManager] convertWeight:YES ofFont:[NSFont fontWithName:fontName size:fontLoop]];
[fontAttributes setObject:displayFont forKey:NSFontAttributeName];
stringSize = [stringToSize sizeWithAttributes:fontAttributes];
if (stringSize.width > areaSize.width)
break;
if (stringSize.height > areaSize.height) …Run Code Online (Sandbox Code Playgroud)