如何使用Text Kit查找单行文本的高度

时间:2016-01-29 04:20:12

标签: ios textkit

我正在尝试使用Text Kit查找单行文本的高度。 Calculating Text Height documentation

  

注意:您无需使用此技术来查找单行文本的高度。 NSLayoutManager方法   defaultLineHeightForFont:返回该值。默认行   height是字体最高的上升者加上绝对值的总和   它最深的下降的价值加上它的领先。

然而,当我检查NSLayoutManager Class Reference(并且还在Xcode中测试)时,我没有看到defaultLineHeightForFont:方法。这是为什么?还有其他选择吗?

备注:

  • 我不是想set the line height
  • ways to do this显然不使用Text Kit。但是,由于我已经设置了Text Kit堆栈并且文档似乎表明它是可行的,我想使用Text Kit。
  • 我更喜欢Swift的答案,但Objective-C也可以。

更新

我没有意识到我链接的文档是针对OS X的,直到我阅读@JoshCaswell的评论。我特意在iOS中寻找如何做到这一点。

1 个答案:

答案 0 :(得分:2)

在TextKit中,您可以使用布局管理器来获取行高 - lineFragmentRectForGlyphAtIndex:effectiveRange:。正如您从该函数的名称中注意到的那样,它被命名为" line fragment"。为什么?因为并不总是你的布局有一个完整的行,而是你可能有一个排除路径(包含一个形状或图像),文本围绕它。在这种情况下,您将拥有文本布局的部分行(行片段)。

在布局管理器的委托中,您将实现一个可能如下所示的函数:

-(void)layoutManager:(NSLayoutManager *)layoutManager didCompleteLayoutForTextContainer:(NSTextContainer *)textContainer atEnd:(BOOL)layoutFinishedFlag{
//This is only for first Glyph
CGRect lineFragmentRect = [layoutManager lineFragmentUsedRectForGlyphAtIndex:0 effectiveRange:nil];
// The height of this rect is the line height.
}