cocoa - NSTextView 在深色模式下在几乎黑色上绘制黑色

标签 cocoa nstextview macos-darkmode

当我在深色模式下构建 macOS 应用程序时,我的一些 TextView (NSTextView) 在几乎黑色的背景上呈现黑色文本。在界面生成器的属性检查器中,“文本颜色”设置为系统“默认(文本颜色)”,我认为这是正确的。事实上,在 Interface Builder 中,该文本根据需要在深色模式下呈现白色,在浅色模式下呈现黑色。我已经在代码中搜索了任何可能以编程方式将此 View 中的文本颜色设置为黑色的行,但找不到任何行。为什么我的文字总是黑色?

最佳答案

我注意到错误的 TextView 将其“属性字符串”与 Cocoa Bindings 绑定(bind)到返回普通的、非属性 NSString 对象的方法。我这样做可能是因为几年前我编写这个应用程序时很懒,而且它运行得很好。事实证明,这种不匹配就是问题所在。修复方法是修改这些方法以返回 NSAttributedString,其中包含键/值对的属性字典

NSForegroundColorAttributeName : NSColor.controlTextColor

可能发生的情况是,当属性字符串绑定(bind)获取非属性字符串时,Cocoa 被设计为做您可能想要的事情。 Cocoa 没有抛出异常,而是应用了一些“默认”属性,其中包括自 1984 年以来一直是 macOS 默认值的黑色文本颜色 - 在深色模式出现之前完全合理!好吧,苹果公司将默认值从黑色更改为 controlTextColor 可能会很好,但显然他们没有这样做。

结论:我们无法再将 TextView 的属性字符串绑定(bind)到普通的非属性字符串。

或者,您可以使用@Ely的答案并绑定(bind)到value。但是,如果您尝试这样做,并且在绑定(bind)检查器中没有看到 value 绑定(bind),但确实看到了 data 绑定(bind),那是因为 NSTextField 文档中的这些注释:

[value] 绑定(bind)仅在 NSTextView 配置为使用单一字体显示时可用。

及以后

[data] 绑定(bind)仅在 NSTextView 配置为允许多种字体时可用。

它的意思是配置为允许多种字体是,在属性检查器中,允许富文本复选框处于启用状态。相反,配置为使用单一字体显示意味着允许富文本复选框处于关闭状态。

关于cocoa - NSTextView 在深色模式下在几乎黑色上绘制黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52829249/

相关文章:

iphone - cocoa ——重新初始化一个对象?

cocoa - 单击鼠标时“确定”按钮的行为有所不同

cocoa - NSTextView 的内在内容大小

css - 如何在 MacOS Mojave 中使用 CSS 暗模式?

objective-c - macOS 深色模式和 NSAboutPanelOptionCredits

macos - 深色模式 : NSColor. colorNamed 在某些方法中不会返回正确的颜色

cocoa - 核心文本具有不同高度的多列

iphone - 多级 nsmutabledictionary 的设置值

swift - 将 unicodeScalars 索引转换为 swift 字符串中的字符索引

cocoa - 将多个 NSTextView 元素中的数据写入单个文件