代码之家  ›  专栏  ›  技术社区  ›  nrj

如何检测nsdrawer是否会在屏幕外打开

  •  2
  • nrj  · 技术社区  · 16 年前

    我正在开发一个主窗口有一个nsdrawer的应用程序。抽屉总是在右边打开,这是至关重要的,这就是我编码它的工作方式。我想知道的是,是否有一种方法来检测抽屉是否会“离开屏幕”…有什么方法可以检测到这个吗?如果是这样,怎么办?另外,如何移动主窗口来调整将打开的抽屉的宽度?

    事先谢谢。

    尼克

    编辑:

    这是罗布建议的解决办法。

    -(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];     
    }
    }
    
    1 回复  |  直到 16 年前
        1
  •  4
  •   Rob Keniger    16 年前

    您可以使用nsscreen的方法计算扩展抽屉的框架是否会在屏幕外打开,然后使用-setframe:display:animate:在打开抽屉之前将窗口移动到离屏幕边缘所需的距离。