Расхождение при расчете геометрического размера струны - PullRequest
0 голосов
/ 13 февраля 2019

Почему результаты 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.Я не мог найти информацию там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...