问题描述
无法在 NSView ( MacOs ) 中绘制右对齐的字符串 这是我的代码,它崩溃了:
-[__SwiftValue lineBreakMode]:无法识别的选择器发送到实例 0x600003408750
let attrs = [NSAttributedString.Key.foregroundColor:NSColor.white,NSAttributedString.Key.paragraphStyle:NSTextAlignment.right
] as [NSAttributedString.Key : Any]
let absolutPoint = NSPoint(x: 0.0,y: 0.0)
var convertedPt = convertPoint(dataPoint:se,scaleX:scaleX,scaleY:scaleY)
convertedPt.x = absolutPoint.x
let scalaLabel = Nsstring(format:"%3.0f",se.y)
let place = NSMakeRect(convertedPt.x,convertedPt.y,80.0,12.0)
scalaLabel.draw(in:place,withAttributes:attrs )
如果我没有在 attrs 中设置 paragraphStyle,文本将被正确绘制。但没有正当理由。 知道我的代码有什么问题吗?
解决方法
NSAttributedString.Key.paragraphStyle:NSTextAlignment.right
这是无效的,这就是它崩溃的原因。
该值应该是 NSParagraphStyle
,而不是 documentation 中所述的 NSTextAlignment
:
该属性的值是一个 NSParagraphStyle
对象。用这个
属性将多个属性应用于一系列文本。如果你这样做
不指定此属性,字符串使用默认段落
属性,由 default
的 NSParagraphStyle
方法返回。
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .right
let attrs = [NSAttributedString.Key.foregroundColor:NSColor.white,NSAttributedString.Key.paragraphStyle: paragraphStyle
] as [NSAttributedString.Key : Any]
旁注,如果您之前说明类型,则可能会缩短:
let attrs: NSAttributedString.Key: Any] = [foregroundColor: NSColor.white,paragraphStyle: paragraphStyle]