我正在开发的应用程序支持数百种不同的字体。其中一些字体,特别是脚本字体,具有显着的上升和下降。当在某些这些字体上调用
很不幸,这并不起作用,因为
这是解决这个问题的最简单方法吗?如果是,我如何计算文本视图顶部与第一行文本中最高字形顶部之间的距离?
sizeToFit()
时,会得到显着的顶部和底部填充(左侧图像)。目标是最终得到右侧的图像,使最高的字形与文本视图的边界框顶部对齐。
这是上面图片的日志:Point Size: 59.0
Ascender: 70.21
Descender: -33.158
Line Height: 103.368
Leading: 1.416
TextView Height: 105.0
我的第一个想法是查看文本第一行中每个字形的高度,然后计算容器顶部和最高字形顶部之间的偏移量。然后我可以使用textContainerInset
相应地调整上边距。
我在我的UITextView
子类中尝试了类似这样的代码:
for location in 0 ..< lastGlyphIndexInFirstLine {
let glphyRect = self.layoutManager.boundingRect(forGlyphRange: NSRange(location: location, length: 1), in: self.textContainer)
print(glphyRect.size.height) // prints 104.78399999999999 for each glyph
}
很不幸,这并不起作用,因为
boundRect(forGlyphRange:in:)
似乎不返回字形本身的矩形(我猜这总是相同的值,因为它返回行片段的高度?)。这是解决这个问题的最简单方法吗?如果是,我如何计算文本视图顶部与第一行文本中最高字形顶部之间的距离?