具有最小宽度的NSMenu:按下⌥会导致自定义视图忽略最小宽度

具有最小宽度的NSMenu:按下⌥会导致自定义视图忽略最小宽度

问题描述:

我正在编写一个状态菜单应用程序,其中一个菜单项以其中一个大图像为中心。到目前为止,它一直运行良好 - 直到我试图在状态菜单上设置最小宽度。具有最小宽度的NSMenu:按下⌥会导致自定义视图忽略最小宽度

当我按下Option(选项)键时,如果没有最小宽度,使用替代菜单项时,带有图像的自定义视图会将其自身调整为其大小。

下面是一些说明问题的图像,在holding之前和之后。灰色是一种自定义视图,应该伸展以覆盖整个宽度。

before after

只要打开菜单的问题依然存在,甚至释放后⌥,但消失时,菜单关闭并重新打开,直到⌥再次按下。

我的系统版本是Mac OS X v10.12.6(Sierra)。我对视图自动尺寸调整掩码是这样的:

let autoresizingMask: NSView.AutoresizingMask = [.minXMargin, .minYMargin, .maxXMargin, .maxYMargin, .width, .height] 

编辑:如果我做的菜单项为中心的视图,而不是伸展(不.width.height),它仍然向左移动。

我刚刚意识到解决方案非常简单。我只需要将自定义视图的框架宽度设置为状态菜单的最小宽度。

let r = NSRect(x: 0, y: 0, width: statusMenuMinWidth, height: h)