【问题标题】:Draw NSString right justified with NSString.draw(in rect: withAttributes: ) in MacOS?在 MacOS 中使用 NSString.draw(in rect: withAttributes: ) 绘制 NSString 右对齐?
【发布时间】:2021-06-24 03:38:45
【问题描述】:

无法在 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,文本会正确绘制。但不是右对齐。 知道我的代码有什么问题吗?

【问题讨论】:

    标签: macos nsstring draw


    【解决方案1】:
    NSAttributedString.Key.paragraphStyle:NSTextAlignment.right
    

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

    该属性的值是一个NSParagraphStyle 对象。用这个 属性将多个属性应用于一系列文本。如果你这样做 不指定此属性,字符串使用默认段落 属性,由NSParagraphStyledefault 方法返回。

    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]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 2012-08-24
      • 2016-09-05
      相关资源
      最近更新 更多