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 }
}
}
但这并不能解开绘制状态的谜团。MacOS 11 Big Sur 具有新的 UI 外观。菜单项现在以不同的方式突出显示,其内容周围带有圆形框。
我的问题是:我应该手动模拟那个圆形框,还是在新的 App Kit 中有一些默认方式来绘制圆形的菜单项选择?
换句话说,在 macOS 11 Big Sur 中让 NSmenuItem 具有自定义视图的最佳方式是什么?