改变NSWindow标题栏的颜色

dee*_*epa 4 cocoa colors titlebar nswindow

我正在开发一个桌面应用程序,我想在其中更改NSWindow标题栏的颜色.我怎么能这样做?

Abh*_*ert 5

NSWindow的内容视图具有一个超级视图,它是NSThemeFrame的一个实例。该类负责绘制标题文本,窗口/工具栏背景纹理,并且包含其他所有内容的子视图(关闭按钮,全屏按钮,NSDocument图标等)。

您可以使用Objective-C运行时将NSThemeFrame的drawRect:方法替换为您自己的方法,该方法将调用父实现,然后在其之上执行自定义绘制。

还有一个私有方法可以找到标题所在的矩形,而NSFont上的公共方法可以找到标题的字体和字体大小。

我所做的是将窗口背景色设置为纯色(黑色)而不是渐变/纹理,然后将其设置为“纹理化”窗口(这会导致背景色实际呈现,否则不会发生),然后在我知道已经绘制标题的区域的标题栏上绘制一个黑色正方形,然后在该位置绘制我自己的标题,用浅灰色而不是深灰色。

源代码在这里:https : //github.com/abhibeckert/Dux/blob/master/Dux/DuxProjectWindow.m(注意:仅当DUX_DARK_MODE == 1时,它才会自定义标题文本颜色)

这样做可能会使您的应用程序被Mac App Store屏蔽,但这是相当可靠的。只需确保您使用OS X的每个新主要版本进行测试即可。


小智 5

要更改窗口工具栏的颜色:

  1. 设置窗口样式在"属性"检查器中设置纹理.
  2. 在代码中: [window setBackgroundColor: MyCustomColor];