【发布时间】:2019-05-11 16:20:43
【问题描述】:
我的操作系统设置为暗模式,我的整个应用程序都可以正常呈现,但一些动态创建的 NSMenu 实例除外,它们以旧的浅色样式呈现。
如何让这些菜单使用深色视觉样式呈现?
【问题讨论】:
标签: objective-c macos cocoa nsmenu macos-darkmode
我的操作系统设置为暗模式,我的整个应用程序都可以正常呈现,但一些动态创建的 NSMenu 实例除外,它们以旧的浅色样式呈现。
如何让这些菜单使用深色视觉样式呈现?
【问题讨论】:
标签: objective-c macos cocoa nsmenu macos-darkmode
仅当您指定父视图时才会应用深色视觉样式。
如果此处view 为nil,则将使用旧样式:
NSMenu* menu;
NSView* view; // cannot be nil
[menu popUpMenuPositioningItem:nil atLocation:NSMakePoint(0, 0) inView:view];
【讨论】:
popUpMenuPositioningItem 有一个未记录的 apperance 参数。您必须自定义现有的 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 Bridging Header”文件中声明它,并在“Swift Compiler - General”下添加 Xcode 项目构建设置的路径
【讨论】: