无法拖动 NSWindow 并将其定位在停靠栏下方

Unable to drag and position NSWindow below dock

我在 IB 中创建了一个 NSWindow,然后以编程方式设置:

-(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 拖动并重新定位到停靠栏下方。如 GIF 所示,尝试这样做会在释放 NSWindow 时将其弹回到停靠栏上方。

我怎样才能把这个 NSWindow 放在码头下面?

您可以覆盖 -[NSWindow constrainFrameRect:toScreen:] 以根据需要进行约束或不约束。为了防止您的 window 受到限制,只需 return 未修改建议的框架 rect。

或者,您可以使用无边框 window 而不是带有标题栏的标题栏,然后将其隐藏。系统所做的是移动 window,使其标题栏保持在 Dock 顶部上方。如果它没有标题栏,它就不会这样做,我不认为。