我正在开发一个桌面应用程序,我想在其中更改 NSWindow 标题栏的颜色。我该怎么做?
3 回答
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 主要版本上都对其进行测试。
要更改窗口工具栏的颜色:
- 在属性检查器中设置窗口样式纹理。
- 在代码中:
[window setBackgroundColor: MyCustomColor];
这使用私有方法,但有效:
NSEnumerator *viewEnum = [[[[[[window contentView] superview] titlebarViewController] view] subviews] objectEnumerator];
NSView *viewObject;
while(viewObject = (NSView *)[viewEnum nextObject]) {
if([viewObject className] == @"NSTextField") [viewObject setTextColor: .. your color .. ];
}