NSAttributedString size() 方法 returns 宽度不正确
NSAttributedString size() method returns incorrect width
我创建了一个自定义 NSButtonCell
子类,它允许自定义按钮内容之间的填充。在我的实现中(完整的源代码可以在 GitHub) I override 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)
}
结果看起来不太好:
为了获得想要的结果,我必须在宽度上添加一个额外的填充:
我也尝试使用 boundingRect(with:options:context:) 来获取尺寸,但我得到了相同的结果。
供以后参考:我弄明白了这个问题。使用 attributedTitle
时,指定按钮的字体很重要,这样 attributedString.size()
才能正确计算出必要的宽度。我假设默认情况下,计算是基于 NSButton
的默认字体,但显然这是不正确的。 See my commit了解更多详情。
我创建了一个自定义 NSButtonCell
子类,它允许自定义按钮内容之间的填充。在我的实现中(完整的源代码可以在 GitHub) I override 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)
}
结果看起来不太好:
为了获得想要的结果,我必须在宽度上添加一个额外的填充:
我也尝试使用 boundingRect(with:options:context:) 来获取尺寸,但我得到了相同的结果。
供以后参考:我弄明白了这个问题。使用 attributedTitle
时,指定按钮的字体很重要,这样 attributedString.size()
才能正确计算出必要的宽度。我假设默认情况下,计算是基于 NSButton
的默认字体,但显然这是不正确的。 See my commit了解更多详情。