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

时间:2019-04-22 16:38:46

标签: swift nsattributedstring core-text 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的实际大小却无济于事?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用属性字符串并获取其大小时,至少需要指定一种字体。例如,"Str"的大小在8磅字体与72磅字体之间会大不相同。

将计算出的CGRect转换为整数rect也会有帮助,该整数将舍入任何小数位数。使用integral的{​​{1}}属性。