cocoa - 更改 NSWindow 标题栏的颜色

标签 cocoa colors nswindow titlebar

我正在开发一个桌面应用程序,我想在其中更改 NSWindow 标题栏的颜色。我究竟该如何做到这一点?

最佳答案

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

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

还有一个私有(private)方法来查找绘制标题的矩形,以及 NSFont 上的公共(public)方法来查找它的字体和字体大小。

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

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

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

关于cocoa - 更改 NSWindow 标题栏的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3044303/

相关文章:

objective-c - 数据源对象属于哪里? Controller 还是模型?

netbeans - 如何更改 Netbeans 预览文档的字体和颜色?

cocoa - 如何让 DropboxAPI 在 runModalForWindow 中工作

objective-c - NSWindow 标题栏右半部分不可拖动

ios - 创建 iOS/OS X 跨平台类

objective-c - 使用 NSData 时出现连接问题如何处理?

iphone - CGImageDestination 和文件命名问题

无序列表中的 css 颜色继承,包括类名

javascript - 如何在 HSV 颜色空间中插入色调值?

objective-c - 有没有一种简单的方法可以将 NSWindow NIB 更改为 NSView NIB?