给定具有关联的Concepttext: String的结构area: NSRect,在视图上绘制该结构时,它将在给定的String中绘制NSRect

我想单击一下,显示一个NSTextField哪个“内容”(单元格)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))


预期结果应如下所示:

swift - 绘制NSTextField设置内容NSRect-LMLPHP

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

谢谢

最佳答案

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

如果要弄清楚文本字段的边框填充是什么,可以将其celldrawingRect(forBounds:)与文本字段的bounds进行比较。绘图rect将从边界开始插入一点。要计算框架以获得特定的绘图矩形,您可以通过从所需的绘图矩形“偏移”相同的数量来反转帧。

关于swift - 绘制NSTextField设置内容NSRect,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43922735/

10-11 14:50