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