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

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

 UIFont* myFont = [UIFont fontWithName:@"Helvetica" size:1000.0]; NSString* myStr = @"m"; CGSize mySize = [myStr sizeWithFont:myFont]; 

如图所示’m’,它返回{834, 1151} 。 用myStr = @"t"代替,它是{278, 1151} 。 较小的宽度显示为预期,但不是高度。

其他一些function是否紧紧包裹文字? 我理想地寻找与Android的Paint.getTextBounds()相当的东西。

嗯……我假设你只会和个人角色一起工作。 sizeWithFont ,如上所述,返回该字体最大字符的高度,因为无论你做什么,文本字段都将是该高度。 您将能够获得最大的高度值(UIFont的CGFloat capHeight ),但看起来您将使用各种文本

我会看一下CoreText框架。 从这里开始阅读。 你不可避免地会得到一些类似的东西:

 CGFloat GetLineHeightForFont(CTFontRef iFont) { CGFloat lineHeight = 0.0; check(iFont != NULL); lineHeight += CTFontGetLeading(iFont); return lineHeight; } 

您从此方法获得的信息基本上是字体的行高(即,它是上升加上您选择的字体的下降)。 它不是基于单个字符,而是基于特定的字体指标。 您可以从UIFont类中获取有关字体度量的大部分信息(例如,方法-ascender为您提供字体上升的高度)。 大多数情况下,您将处理使用高度上升点和该字体的最低下划线绘制字形所需的垂直空间总量。 无法从UIFont获取有关各个字形的信息。 如果您需要这些信息,您将不得不查看CoreText框架,它为您绘制和排列字形提供了更大的灵活性,但使用起来要复杂得多。

有关处理应用程序中文本的更多信息,请参阅“ 文本,Web和编辑编程指南”中的“ 绘图和管理文本”部分。 无论您是使用UIKit还是CoreText路由,它都是您需要处理的大多数框架和类的一个很好的启动点。