绘制 NSTextField 设置内容 NSRect

Draw NSTextField setting the content NSRect

给定一个结构 Concept,它有一个关联的 text: Stringarea: NSRect,当在视图上绘制时,它将在给定的 [= 中绘制 String 15=].

我想在点击时,显示 NSTextField 其中 "content" (单元格)NSRect 等于给定的 NSRect

如果我尝试设置 textField.frame = concept.area,考虑到 NSTextField 的边框 + 填充,单元格将呈现在插入位置,因此它会以不同的方式呈现文本,稍微移动,NSRect.

在代码中,这个想法类似于

struct Concept {
  let text: String
  let area: NSRect

  func draw() {
    text.draw(inRect: area)
  }
}

let conceptRect = NSRect(x: 50, y: 60, width: 80, height: 20)
let concept = Concept(text: "sample text", area: conceptRect)

let textField = NSTextField()
textField.stringValue = concept.text

textField.???? = area
let textFieldRect = textField.frame

assert(textFieldRect != conceptRect)
assert(textFieldRect.contains(conceptRect))

预期结果应如下所示:

关于如何实现此目标的任何想法?

谢谢

您没有说明如何在 area 中绘制字符串,这可能会影响其绘制的确切位置。

如果您想了解文本字段的边框填充是什么,您可以将其 celldrawingRect(forBounds:) 与文本字段的 bounds 进行比较。绘图矩形将从边界插入一点。要计算一个框架以获得特定的绘图矩形,您可以将其从所需的绘图矩形中反转 "outsetting" 相同的数量。