根据容器宽度手动计算绘制的 NSAttributedString 的字体大小
Manually calculate font size for drawn NSAttributedString based on container width
UILabel
有 属性 adjustsFontSizeToFitWidth
如果边界框小于当前字体大小可以显示的文本,它会计算完美的字体大小。
我正在 UIGraphicsImageRendererContext
上绘制文本,然后将其导出到图像中。我想用我当前使用的 NSAttributedStrings
重新创建 adjustsFontSizeToFitWidth
的行为。这是我用来绘制的代码:
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))
有没有办法根据可用宽度计算出完美的字体大小?我假设这将是一种算法?
我通过将较小的容器宽度与建议的字符串宽度相乘来找到比例因子,然后使用该比例因子来确定新的字体大小来实现这一点。
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))
UILabel
有 属性 adjustsFontSizeToFitWidth
如果边界框小于当前字体大小可以显示的文本,它会计算完美的字体大小。
我正在 UIGraphicsImageRendererContext
上绘制文本,然后将其导出到图像中。我想用我当前使用的 NSAttributedStrings
重新创建 adjustsFontSizeToFitWidth
的行为。这是我用来绘制的代码:
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))
有没有办法根据可用宽度计算出完美的字体大小?我假设这将是一种算法?
我通过将较小的容器宽度与建议的字符串宽度相乘来找到比例因子,然后使用该比例因子来确定新的字体大小来实现这一点。
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))