如何让动态 NSMenu 使用 Mojave 黑暗模式?
How to get dynamic NSMenu to use Mojave Dark Mode?
我的 OS 设置为深色模式,我的整个应用程序正确呈现,除了一些动态创建的 NSMenu 实例,它们以旧的浅色样式呈现。
如何让这些菜单使用深色视觉样式呈现?
深色视觉样式仅在您指定父视图时应用。
这里如果view
是nil
,将使用旧的样式:
NSMenu* menu;
NSView* view; // cannot be nil
[menu popUpMenuPositioningItem:nil atLocation:NSMakePoint(0, 0) inView:view];
popUpMenuPositioningItem
有一个未记录的 apperance
参数。您必须自定义现有的 NSMenu
class 才能使用它:
@interface NSMenu ()
- (BOOL)popUpMenuPositioningItem:(nullable NSMenuItem *)item atLocation:(NSPoint)location inView:(nullable NSView *)view appearance:(nullable NSAppearance *)appearance NS_AVAILABLE_MAC(10_6);
@end
如果您想通过 popUp
在 Swift 中使用它,您必须在 "Objective-C Bridging Header" 文件中声明它并将路径添加到 Xcode 项目的构建设置在 "Swift Compiler - General"
之下
我找到了这个解决方案 here and here. Class extension is documented here。
我的 OS 设置为深色模式,我的整个应用程序正确呈现,除了一些动态创建的 NSMenu 实例,它们以旧的浅色样式呈现。
如何让这些菜单使用深色视觉样式呈现?
深色视觉样式仅在您指定父视图时应用。
这里如果view
是nil
,将使用旧的样式:
NSMenu* menu;
NSView* view; // cannot be nil
[menu popUpMenuPositioningItem:nil atLocation:NSMakePoint(0, 0) inView:view];
popUpMenuPositioningItem
有一个未记录的 apperance
参数。您必须自定义现有的 NSMenu
class 才能使用它:
@interface NSMenu ()
- (BOOL)popUpMenuPositioningItem:(nullable NSMenuItem *)item atLocation:(NSPoint)location inView:(nullable NSView *)view appearance:(nullable NSAppearance *)appearance NS_AVAILABLE_MAC(10_6);
@end
如果您想通过 popUp
在 Swift 中使用它,您必须在 "Objective-C Bridging Header" 文件中声明它并将路径添加到 Xcode 项目的构建设置在 "Swift Compiler - General"
我找到了这个解决方案 here and here. Class extension is documented here。