Почему рисование с использованием CoreText требует увеличения размера CGRect? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь нарисовать текст, используя CoreText.У меня есть следующий код:

guard let context = UIGraphicsGetCurrentContext() else { return }

let attrString = NSAttributedString(string: "Str")
let path = CGMutablePath()

// Commented code does work, why?
// path.addRect(CGRect(x: 0, y: 50, width: attrString.size().width + 1, height: attrString.size().height + 1))
path.addRect(CGRect(x: 0, y: 50, width: attrString.size().width, height: attrString.size().height))

let framesetter = CTFramesetterCreateWithAttributedString(attrString as CFAttributedString)
let frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, attrString.length), path, nil)

CTFrameDraw(frame, context)

Почему увеличение размера CGRect помогает, а фактический размер NSAttributedString - нет?

Любая помощь приветствуется.

1 Ответ

1 голос
/ 22 апреля 2019

При работе с приписанной строкой и получении ее размера необходимо как минимум указать шрифт.Например, размер "Str" будет сильно отличаться при использовании шрифта с 8 точками и шрифтом с 72 точками.

Может также помочь преобразовать вычисленное значение CGRect в целое прямоугольное число, которое округлит любойдробные размеры.Используйте свойство integral CGRect.

...