根据容器宽度手动计算绘制的NSAttributedString的字体大小

时间:2020-03-29 23:13:59

标签: uikit nsattributedstring uigraphicscontext

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 :(得分:0)

我通过将较小的容器宽度与建议的字符串宽度相乘,然后使用该比例因子确定新的字体大小来找到比例因子,从而实现了这一目标。

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))