NSAttributedString size()方法返回的宽度不正确

时间:2018-11-17 17:17:13

标签: macos cocoa nsattributedstring nsbutton nsbuttoncell

我创建了一个自定义NSButtonCell子类,该子类允许自定义按钮内容之间的填充。在我的实现中(完整的源代码可以在GitHub上找到),我重写titleRect(forBounds:)来放置按钮标题:

var titleSize: NSSize {
    return NSSize(width: ceil(attributedTitle.size().width),
                  height: ceil(attributedTitle.size().height))
}

override func titleRect(forBounds rect: NSRect) -> NSRect {
    return CGRect(x: paddingLeft,
                  y: rect.height / 2 - titleSize.height / 2,
                  width: titleSize.width,
                  height: titleSize.height)
}

效果不佳:

enter image description here

要获得所需的结果,我必须在宽度上添加额外的填充: enter image description here

我也尝试使用boundingRect(with:options:context:)来获取大小,但是得到了相同的结果。

1 个答案:

答案 0 :(得分:1)

供以后参考:我已找出问题所在。使用attributedTitle时,指定按钮的字体很重要,这样attributedString.size()才能正确计算必要的宽度。我假设默认情况下,计算基于NSButton的默认字体,但是显然这是不正确的。 See my commit了解更多详情。