【问题标题】:How to get dynamic NSMenu to use Mojave Dark Mode?如何获得动态 NSMenu 以使用 Mojave 暗模式?
【发布时间】:2019-05-11 16:20:43
【问题描述】:

我的操作系统设置为暗模式,我的整个应用程序都可以正常呈现,但一些动态创建的 NSMenu 实例除外,它们以旧的浅色样式呈现。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      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 项目构建设置的路径

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-07
        • 1970-01-01
        • 2020-04-12
        • 2017-06-20
        • 1970-01-01
        相关资源
        最近更新 更多