【问题标题】:Custom NSButton drawing messes up text rendering自定义 NSButton 绘图搞乱了文本渲染
【发布时间】:2016-11-07 12:29:47
【问题描述】:

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

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

当我在 Xcode 的 Reveal-rip off 中检查这一点时,我看到文本嵌入在 NSButtonTextField 中,而没有覆盖任何绘图方法。一旦任何绘图方法被覆盖,NSButtonTextField 就会消失。

当我在按钮文本后面插入背景层并设置时,这些都不会发生

button.isBorderd = false

但我不太喜欢这种解决方案。

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

任何帮助将不胜感激/

【问题讨论】:

    标签: macos cocoa custom-controls nsbutton nsbuttoncell


    【解决方案1】:

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

    我最终添加了一个 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 中呈现所有非文本,然后让文本字段呈现文本。也不理想,但这是我能够匹配字体渲染的唯一方法。

    【讨论】:

    • 谢谢。我没想到。
    【解决方案2】:

    我有同样的问题,不仅在文本中,而且在整个窗口中。我解决了它在应用程序 Info.plist 中添加一个新行

    支持高分辨率的布尔值是

    Show this Apple Tutorial

    之前:

    之后:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-05
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多