gpt4 book ai didi

macos - 无法匹配包含自定义 View 的 Yosemite NSMenuItem 的鲜艳背景

转载 作者:行者123 更新时间:2023-12-03 16:01:23 27 4
gpt4 key购买 nike

我正在尝试向 OS X 10.10 Yosemite 菜单栏中的 NSMenuItem 添加自定义 View 。

自定义 View 只是一个带有 NSTextField“标签”的 NSView 背景。

问题是背景 NSView 在添加到菜单时会被赋予 Yosemite 风格的活力/透明度。 NSTextfield 标签不是。

Background colors do not match

通过使用 NSRectFillUsingOperation,我已经让它在 Yosemite 中的某些背景颜色上看起来不错。但其他人仍然不匹配。当它工作时,手动“突出显示” View 后,原始颜色发生变化并且不再匹配。如果需要,我可以为此挖掘一些示例代码。

然后,当它在 Yosemite 中看起来不错时,在 10.9 Mavericks 中看起来很糟糕。

我还尝试将 wantsLayer 属性设置为 YES,将 View 转换为 CALayer 支持的 View 。这会产生其他问题,例如文本在清晰的背景下无法正确抗锯齿。

我的问题:

如何在 NSMenuItem 自定义 View 顶部显示标签?标签的背景必须与 View 的背景完全匹配。解决方案必须适用于 Yosemite 和 Mavericks。

示例代码如下:

self.statusItem = [[NSStatusBar systemStatusBar]
statusItemWithLength:NSVariableStatusItemLength];
[self.statusItem setTitle:@"TEST"];
[self.statusItem setHighlightMode:YES];
[self.statusItem setEnabled:YES];
[self.statusItem setTarget:self];

NSMenu *menu = [[NSMenu alloc] init];
[menu addItemWithTitle:@"Disabled menu item" action:nil keyEquivalent:@""];
[menu addItemWithTitle:@"Enabled menu item" action:@selector(enabled) keyEquivalent:@""];

NSTextField *label = [[NSTextField alloc] initWithFrame:NSMakeRect(30, 20, 50, 20)];
label.stringValue = @"label";
label.editable = NO;
label.bordered = NO;
label.backgroundColor = [NSColor blueColor];
//label.backgroundColor = [NSColor clearColor];


PKMenuItemView *view = [[PKMenuItemView alloc] initWithFrame:NSMakeRect(0, 0, 200, 50)];
[view addSubview:label];

NSMenuItem *viewMenuItem = [[NSMenuItem alloc] init];
[viewMenuItem setView:view];
[menu addItem:viewMenuItem];

self.statusItem.menu = menu;

我已经对 NSView 进行了子类化以覆盖 drawRect: 并绘制彩色背景:

- (void)drawRect:(NSRect)dirtyRect {
[super drawRect:dirtyRect];

[[NSColor blueColor] setFill];
NSRectFill(dirtyRect);
//NSRectFillUsingOperation(dirtyRect, NSCompositeSourceOver);
}

最佳答案

这确实有点黑客,但它对我有用。尝试将带有空图像的 NSImageView 添加到您的自定义 View 。 ImageView 必须占据整个 View 。

Using an NSImageView

关于macos - 无法匹配包含自定义 View 的 Yosemite NSMenuItem 的鲜艳背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26851306/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com