Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.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 如何检测NSDrawer是否会在屏幕外打开_Objective C_Cocoa_Nswindow - Fatal编程技术网

Objective c 如何检测NSDrawer是否会在屏幕外打开

Objective c 如何检测NSDrawer是否会在屏幕外打开,objective-c,cocoa,nswindow,Objective C,Cocoa,Nswindow,我正在开发一个应用程序,它的主窗口有一个NSDrawer。抽屉总是在右边打开是至关重要的,这就是我如何编码它的工作原理。我想知道的是,是否有一种方法可以检测抽屉是否会“在屏幕外”打开。。。有没有办法让我检测到这一点?如果是,怎么做?另外,我怎样才能移动主窗口来调整将打开的抽屉的宽度 提前谢谢 尼克 编辑: 多亏了Rob的建议,这里才是解决方案 -(IBAction)toggleDrawer:(id)sender { NSRect screenFrame = [[[NSScreen screen

我正在开发一个应用程序,它的主窗口有一个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];     
}
}

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

Perfect。非常感谢。对于其他感兴趣的人,我已经在问题中添加了我使用的代码。你们两个都是好的解决方案!可以选择从宽度而不是原点减去
newRect
中的
偏移量。