【问题标题】:How to to find the height of a single line of text using Text Kit如何使用 Text Kit 查找单行文本的高度
【发布时间】:2016-01-29 04:20:12
【问题描述】:

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

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

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

注意事项:

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

更新

直到我阅读了@JoshCaswell 的评论,我才意识到我链接到的文档是针对 OS X 的。我正在专门寻找如何在 iOS 中执行此操作。

【问题讨论】:

  • 您链接到 OS X 编程指南、NSLayoutManager 参考的 tvOS 副本,并用 iOS 标记了问题。你能澄清一下你的目标平台吗?在 OS X 上,NSLayoutManager does indeed have -defaultLineHeightForFont:
  • 啊,我错过了。我的目标是 iOS,而不是 OS X。
  • 真的讨厌 Apple 最新的文档搜索网络界面。以这种方式混淆自己是非常容易的,当你在寻找 OS X 时,点击 tvOS 文档(并且简单类名的关键字结果很糟糕)。

标签: ios textkit


【解决方案1】:

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

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

-(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.
}

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多