Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 相对于按钮的popUpContextMenu何时会溢出屏幕?_Objective C_Cocoa - Fatal编程技术网

Objective c 相对于按钮的popUpContextMenu何时会溢出屏幕?

Objective c 相对于按钮的popUpContextMenu何时会溢出屏幕?,objective-c,cocoa,Objective C,Cocoa,当单击按钮以显示某些共享选项时,我试图显示NSMenu。我无法使用NSSharingServicePicker,因为我需要在后台生成可共享项。我通过一个简单的iAction来实现这一点: 如果窗口不太靠近屏幕边缘,这通常可以正常工作。此时,正常位置会跳跃,因为没有足够的空间容纳菜单: 我通过确定溢出量多少解决了这个问题: float marginRight = NSScreen.mainScreen.frame.size.width - (self.window.frame.origin.x

当单击按钮以显示某些共享选项时,我试图显示NSMenu。我无法使用NSSharingServicePicker,因为我需要在后台生成可共享项。我通过一个简单的iAction来实现这一点:

如果窗口不太靠近屏幕边缘,这通常可以正常工作。此时,正常位置会跳跃,因为没有足够的空间容纳菜单:

我通过确定溢出量多少解决了这个问题:

float marginRight = NSScreen.mainScreen.frame.size.width - (self.window.frame.origin.x + self.window.frame.size.width);
float overflow = self.window.frame.size.width + marginRight - frame.origin.x  - theMenu.size.width - 7;
float difference = 0;
if (overflow < 0){
    difference = overflow;
}
然后在frame.origin.x上加上差实际上是减去差,但这是一个丑陋的修正。我的计算也不正确,这就是为什么我需要减去7

我是否忽略了相对于按钮定位菜单的更有效方法?NSShaingServicePicker的showRelativeToRect:方法在幕后为我计算了这个,并且不需要我做任何额外的计算来避免跳跃

float marginRight = NSScreen.mainScreen.frame.size.width - (self.window.frame.origin.x + self.window.frame.size.width);
float overflow = self.window.frame.size.width + marginRight - frame.origin.x  - theMenu.size.width - 7;
float difference = 0;
if (overflow < 0){
    difference = overflow;
}