如何获得动态NSMenu以使用Mojave Dark Mode?

时间:2019-05-11 16:20:43

标签: objective-c macos cocoa nsmenu macos-darkmode

我的OS设置为暗模式,除某些动态创建的NSMenu实例以旧的浅色样式渲染外,我的整个应用程序均正确渲染。

如何使用深色视觉样式呈现这些菜单?

2 个答案:

答案 0 :(得分:1)

仅当您指定父视图时,才会应用深色视觉样式。

如果此处的viewnil,则将使用旧样式:

NSMenu* menu;
NSView* view; // cannot be nil
[menu popUpMenuPositioningItem:nil atLocation:NSMakePoint(0, 0) inView:view];

答案 1 :(得分:0)

apperance有一个未记录的popUpMenuPositioningItem参数。您必须自定义现有的NSMenu类才能使用它:

@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桥接头”文件中声明它,并在“ Swift Compiler-General”下将路径添加到Xcode项目的构建设置。 / p>

我找到了herehere的解决方案。类扩展记录在here中。