在Cocoa中更改标题栏颜色

3

这个问题可能已经被问过了,但是在谷歌上搜索之后我仍然找不到答案。

如何将Cocoa中标题栏(可以通过点击和拖动带有关闭、最小化和最大化按钮的栏)的颜色更改为与默认灰色不同的颜色?


请认真思考并深入思考您为什么要尝试这样做。 - Rob Keniger
5个回答

12

如果你设置了一个“纹理”的窗口的背景颜色(这种区别在Snow Leopard中并不容易看到),那么该颜色也将应用于标题栏。这就是Firefox所做的。

我建议不要使用真正的标题栏(即将窗口设置为没有标题栏),而是使用+[NSWindow standardWindowButton:forStyleMask:],并将自己的按钮放在“标题栏”中。这样可以更好地控制界面,避免使用hack方法。


你具体建议如何设置窗口没有标题栏?你是指创建一个自定义无边框窗口吗? - Dalmazio

3
如果它是一个面板,您可以将其实例化为HUD窗口以将其更改为黑色。
否则,您不能。是否注意到其他应用程序中没有不同颜色标题栏的Aqua窗口?这就是原因。
唯一改变标题栏外观的另一种方法(而不依赖于私有实现细节,例如框架视图的存在)是使窗口无边框并从头开始创建其标题栏和窗口按钮。

啊,Firefox是如何使用其Personas的呢?我一直很好奇。 - Vervious
哦,我明白了,Firefox可能是自己构建了窗口。 - Vervious

2

如果您采用Colin的方法,在接口生成器中使窗口具有纹理(在窗口属性中的复选框),这里是更改窗口背景颜色的代码行,您需要将其放入appDelegate.m文件的此函数中:

//在这个函数中 ---> - (void)applicationDidFinishLaunching:(NSNotification *)aNotification

//输入以下内容 [_window setBackgroundColor: NSColor.whiteColor];


0

如果您不介意使用私有API,您可以子类化NSThemeFrame。


3
不要这样做,真的不要。 :( 还有更好的方法。 - Colin Barrett
https://dev59.com/3XI-5IYBdhLWcg3wy76n#1665421 - Ben Gotow

0

将标题栏设置为透明

self.window.titlebarAppearsTransparent = YES;

并根据您的喜好设置窗口背景颜色


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接