macOS 11 Big Sur 中带有自定义视图的 NSMenuItem

Vit*_*nko 5 nsmenu appkit custom-view nsmenuitem macos-big-sur

macOS 11 Big Sur 在其当前迭代(beta 1 到 beta 6)中有一个错误/功能,这使得很难将 NSMenuItem 与自定义视图一起使用。具体来说,当菜单项突出显示时,项目的自定义视图不会调用 draw(dirtyRect:)。

我设法通过 NSMenu 委托手动调用 draw(dirtyRect:) 方法来绕过该错误:

func menu(_ menu: NSMenu, willHighlight item: NSMenuItem?) {
    if #available(OSX 11.0, *) {
        // fix for bug when an item with custom view won't be called to draw the highlighting state
        menu.items.filter{ $0.tag == 101 }.forEach{ $0.view?.needsDisplay = true }
    }
}
Run Code Online (Sandbox Code Playgroud)

但这并不能解开绘制状态的奥秘。MacOS 11 Big Sur 具有新的 UI 外观。菜单项现在以不同的方式突出显示,其内容周围带有圆形框。

我的问题是:我应该手动模拟那个圆形框,还是在新的 App Kit 中有一些默认方式来绘制圆形的菜单项选择?

换句话说,在 macOS 11 Big Sur 中使用自定义视图的 NSmenuItem 的最佳方法是什么?