Почему результаты NSAttributedString.size()
и NSLayoutManager.boundingRect(forGlyphRange:in:).size
такие разные?
Пример кода:
let attrs: [NSAttributedString.Key: Any] = [.font: NSFont.systemFont(ofSize: 14.0)]
let container = NSTextContainer()
container.lineFragmentPadding = 0.0
container.lineBreakMode = .byClipping
container.containerSize = NSSize(width: 5e6, height: 5e6)
let layoutManager = NSLayoutManager()
layoutManager.addTextContainer(container)
let text = NSTextStorage()
text.addLayoutManager(layoutManager)
text.setAttributedString(NSAttributedString(string: "Hello, world!", attributes: attrs))
var range = NSMakeRange(0, text.length)
print(text.size())
print(layoutManager.boundingRect(forGlyphRange: range, in: container).size)
text.setAttributedString(NSAttributedString(string: "東京", attributes: attrs))
range = NSMakeRange(0, text.length)
print(text.size())
print(layoutManager.boundingRect(forGlyphRange: range, in: container).size)
Вот результат, который я получаю:
(80.3837890625, 18.0)
(80.3837890625, 17.0)
(25.85410895660203, 14.0)
(25.85410895660203, 19.463557481765747)
Как видите, хотя ширина одинакова, высота не одинакова.В первом случае NSLayoutManager
сообщает о меньшей высоте, чем NSAttributedString
, а во втором случае - о большей.
Чем объясняется эта разница?
Я прочитал документацию дляэти два метода.Я также прочитал обзор текстового уровня системы хранения в архиве Apple.Я не мог найти информацию там.