自定义 NSButton 绘图搞乱了文本渲染

Custom NSButton drawing messes up text rendering

我将 NSButton / NSButtonCell 子类化,一切正常,但至少在 Retina 绘图中,只要我在 NSButton 或 NSButtonCell 中实现任何绘图函数,无论我是否进行一些自定义,文本渲染都会发生变化文本绘图或直接委托给超级实现。

如您所见,仅更改抗锯齿功能后文本变得更细了。

当我在 Xcode 的 Reveal-rip off 中检查它时,我发现当 none 的绘图方法被覆盖时,文本嵌入到 NSButtonTextField 中。一旦任何绘图方法被覆盖,NSButtonTextField 就会消失。

None 当我在按钮文本后面插入背景层并设置

时,会发生这种情况
button.isBorderd = false

但我不太喜欢那个解决方案。

有没有什么方法可以在不弄乱图层的情况下获得相同的 "fat" 文本渲染?也许是一个属性字符串属性,一个特殊的文本绘制命令,什么?

任何帮助将不胜感激/

我无法使用背景层重现您的解决方法,尽管我可能做错了。

我最终添加了一个 NSTextField 作为按钮的子视图,具有以下属性:

_titleTextField = [[NSTextField alloc] initWithFrame:NSZeroRect];
[_titleTextField setBordered:NO];
[_titleTextField setDrawsBackground:NO];
[_titleTextField setFont:[NSFont systemFontOfSize:13]];
[_titleTextField setTextColor:[FantasticalColors color:@"dimLabelTextColor"]];
[_titleTextField setStringValue:[self title]];
[_titleTextField setEditable:NO];
[_titleTextField setFocusRingType:NSFocusRingTypeNone];
[self addSubview:_titleTextField];

然后我能够在单元格的 drawRect 中呈现所有非文本,然后让文本字段呈现文本。也不理想,但这是我能够匹配字体渲染的唯一方法。

我有同样的问题,不仅在文本上而且在整个window。我解决了它在应用 Info.plist

中添加新行

支持高分辨率的布尔值是

Show this Apple Tutorial

之前:

之后: