为什么使用 CoreText 绘图需要增加 CGRect 的大小?

Why does drawing using CoreText require increasing the size of the CGRect?

我正在尝试使用 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 的实际大小却没有?

感谢任何帮助。

使用属性字符串并获取其大小时,您至少需要指定一种字体。例如,"Str" 的大小对于 8 号字体和 72 号字体会有很大不同。

它也可能有助于将计算的 CGRect 转换为整数矩形,它将对任何小数大小进行四舍五入。使用 integral 属性 of CGRect.