我正在开发一个主窗口有 NSDrawer 的应用程序。抽屉总是在右边缘打开是至关重要的,这就是我编写它的工作方式。我想知道的是,是否有办法检测抽屉是否会“在屏幕外”打开……有没有办法可以检测到这一点?如果是这样,怎么做?另外,我如何移动主窗口以调整将要打开的抽屉的宽度?
提前致谢。
缺口
编辑:
感谢 Rob 的建议,这是解决方案。
-(IBAction)toggleDrawer:(id)sender
{
NSRect screenFrame = [[[NSScreen screens] objectAtIndex:0] visibleFrame];
NSRect windowFrame = [window frame];
NSRect drawerFrame = [[[drawer contentView] window] frame];
if ([drawer state] == NSDrawerOpenState)
{
[drawer close];
}
else
{
if (windowFrame.size.width +
windowFrame.origin.x +
drawerFrame.size.width > screenFrame.size.width)
{
NSLog(@"Will Open Off Screen");
float offset = (windowFrame.size.width +
windowFrame.origin.x +
drawerFrame.size.width) - screenFrame.size.width;
NSRect newRect = NSMakeRect(windowFrame.origin.x - offset,
windowFrame.origin.y,
windowFrame.size.width,
windowFrame.size.height);
[window setFrame:newRect display:YES animate:YES];
}
[drawer openOnEdge:NSMaxXEdge];
}
}