无法拖动并将NSWindow定位在码头下方

时间:2017-01-11 16:25:58

标签: objective-c macos interface-builder nswindow

我已经在IB中创建了NSWindow,然后以编程方式进行设置:

enter image description here enter image description here

-(void)viewDidAppear {
    // Keep window on top
    [self.view.window setLevel:CGWindowLevelForKey(kCGMaximumWindowLevelKey)];

    // Keep rounded corners with no title bar
    [self.view.window setOpaque:NO];
    [self.view.window setStyleMask: NSTitledWindowMask | NSFullSizeContentViewWindowMask];
    [self.view.window setMovableByWindowBackground:YES];
    [self.view.window setTitlebarAppearsTransparent:YES];
    [self.view.window setTitleVisibility:NSWindowTitleHidden];
    [self.view.window setShowsToolbarButton:NO];
    [self.view.window standardWindowButton:NSWindowFullScreenButton].hidden = YES;
    [self.view.window standardWindowButton:NSWindowMiniaturizeButton].hidden = YES;
    [self.view.window standardWindowButton:NSWindowCloseButton].hidden = YES;
    [self.view.window standardWindowButton:NSWindowZoomButton].hidden = YES;
    [self.view.window makeKeyWindow];
}

我希望能够在停靠栏下面拖动并重新定位此NSWindow。尝试这样做会在释放它时将NSWindow卡在码头上方,如GIF中所示。

enter image description here

我怎样才能使NSWindow能够定位在码头下方?

1 个答案:

答案 0 :(得分:1)

您可以覆盖-[NSWindow constrainFrameRect:toScreen:]以约束或不约束您喜欢的内容。要防止窗口受到约束,只需返回未修改的建议框架矩形。

或者,你可以使用无边框窗口而不是带有标题栏的窗口然后隐藏它。系统正在做的是移动窗口,使其标题栏保持在Dock顶部之上。如果它没有标题栏,我就不会这样做,我不会这么想。