如何使用 UIKit 计算文本的准确高度?

ham*_*boy 5 cocoa-touch objective-c nsstring ios

我用来-[NSString sizeWithFont]获取文本高度。字符“t”明显高于“m”,但-sizeWithFont为这两个字符串返回相同的高度。这是代码:

UIFont* myFont = [UIFont fontWithName:@"Helvetica" size:1000.0];
NSString* myStr = @"m";
CGSize mySize = [myStr sizeWithFont:myFont];
Run Code Online (Sandbox Code Playgroud)

如图所示,使用“m”时,它会返回{834, 1151}。相反myStr = @"t",它是{278, 1151}. 较小的宽度按预期显示,但高度不显示。

是否有其他函数将文本紧紧包裹?我理想地寻找相当于 Android 的 Paint.getTextBounds() 的东西。

Pet*_*zes 1

嗯……我想你接下来只会处理单个角色。sizeWithFont如上所述,返回该字体最大字符的高度,因为无论您做什么,文本字段都将是该高度。您将能够获得最大的高度值(UIFont's CGFloat capHeight),但是看起来您将处理各种文本

我会看一下 CoreText 框架。从这里开始并继续阅读。不可避免地,你最终会得到类似这样的结果:

CGFloat GetLineHeightForFont(CTFontRef iFont)
{
    CGFloat lineHeight = 0.0;

    check(iFont != NULL);
    lineHeight += CTFontGetLeading(iFont);
    return lineHeight;
}
Run Code Online (Sandbox Code Playgroud)