Вручную рассчитать размер шрифта для нарисованной NSAttributedString на основе ширины контейнера - PullRequest
0 голосов
/ 30 марта 2020

UILabel имеет свойство adjustsFontSizeToFitWidth, которое вычисляет идеальный размер шрифта, если ограничивающий прямоугольник меньше, чем текст, который может отображаться при текущем размере шрифта.

Я рисую текст на UIGraphicsImageRendererContext который затем экспортируется в изображение. Я хотел бы воссоздать поведение adjustsFontSizeToFitWidth с NSAttributedStrings, который я сейчас использую. Вот код, который я использую для рисования:

let text = NSAttributedString(string: "Example Text", attributes: [NSAttributedString.Key.font: font.withSize(16)])
text.draw(in: CGRect(x: 100, y: 100, width: 100, height: 20))

Есть ли способ рассчитать идеальный размер шрифта на основе доступной ширины? Я предполагаю, что это будет алгоритм?

1 Ответ

0 голосов
/ 30 марта 2020

Я добился этого, найдя масштабный коэффициент, добавив меньшую ширину контейнера к предложенной ширине строки, а затем используя этот масштабный коэффициент для определения нового размера шрифта.

var title = NSAttributedString(string: "Example", attributes: [NSAttributedString.Key.font: font.withSize(fontSize)])

let titleWidth = title.size().width
if titleWidth > containerWidth {
  let scaleFactor = containerWidth / titleWidth
  title = NSAttributedString(string: title.string, attributes: [NSAttributedString.Key.font: font.withSize(fontSize * scaleFactor)])
}
title.draw(in: CGRect(x: 100, y: 100, width: containerWidth, height: containerHeight))
...