在 MacOS 中使用 NSString.draw(in rect: withAttributes: ) 绘制 NSString 右对齐?

Chr*_*ger 0 macos draw nsstring

无法在 NSView ( MacOs ) 中绘制右对齐的字符串\n这是我的代码,它崩溃了:

\n

-[__SwiftValue lineBreakMode]:无法识别的选择器发送到实例 0x600003408750

\n
let attrs = [NSAttributedString.Key.foregroundColor:NSColor.white,\n                     NSAttributedString.Key.paragraphStyle:NSTextAlignment.right\n                    ] as [NSAttributedString.Key : Any]\n\n            let absolutPoint = NSPoint(x: 0.0, y: 0.0)\n            var convertedPt  = convertPoint(dataPoint:se,scaleX:scaleX,scaleY:scaleY)\n            convertedPt.x    = absolutPoint.x\n            \n            let scalaLabel = NSString(format:"%3.0f",se.y)\n\n            let place = NSMakeRect(convertedPt.x, convertedPt.y, 80.0, 12.0)\n            scalaLabel.draw(in:place ,withAttributes:attrs )\n
Run Code Online (Sandbox Code Playgroud)\n

如果我没有在attrs中设置paragraphStyle,则文本会正确绘制。但不是右对齐的。\n知道我的代码有什么\xc2\xb4s 问题吗?

\n

Lar*_*rme 5

NSAttributedString.Key.paragraphStyle:NSTextAlignment.right
Run Code Online (Sandbox Code Playgroud)

这是无效的,这就是它崩溃的原因。
该值应该是 a NSParagraphStyle,而不是文档NSTextAlignment中所述的a :

该属性的值是一个NSParagraphStyle对象。使用此属性可将多个属性应用于一定范围的文本。如果不指定此属性,则字符串将使用 的default方法返回的默认段落属性NSParagraphStyle

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .right

let attrs = [NSAttributedString.Key.foregroundColor:NSColor.white,
             NSAttributedString.Key.paragraphStyle: paragraphStyle
            ] as [NSAttributedString.Key : Any]
Run Code Online (Sandbox Code Playgroud)

旁注,如果您之前声明了类型,它可能会缩短:

let attrs: NSAttributedString.Key: Any] = [foregroundColor: NSColor.white,
                                           paragraphStyle: paragraphStyle]
Run Code Online (Sandbox Code Playgroud)