NSWindow:改变窗口按钮的位置

Lup*_*rus 10 macos cocoa appkit swift

我想伪造一个标题栏(更大,颜色不同),所以到目前为止我的方法如下:

我在标题栏的正下方添加了一个NSView,然后使用以下代码将标题栏设置为透明:

self.window.titlebarAppearsTransparent = true
self.window.styleMask |= NSFullSizeContentViewWindowMask    
Run Code Online (Sandbox Code Playgroud)

下一步是,我将NSView子类化添加一些绘图方法(背景等),特别是代码,以便我可以使用完整的NSView来移动窗口(因此我使用此代码:https:// stackoverflow. com/a/4564630/2062613)

这是结果:

窗纱

现在我要做的下一件事就是在这个新标题栏中垂直居中交通灯按钮.我知道,我可以使用self.window.standardWindowButton(NSWindowButton.CloseButton)(例如)访问按钮.但更改frame.origin其中一个按钮没有任何影响.

如何更改按钮的origin.y值?

UPDATE

我发现,窗口调整大小会重新排列按钮.现在我决定将按钮作为子视图添加到我的假标题栏中,因为移动标题栏中的原点会切断按钮(显然它仅限于标题栏rect).

这有效,但奇怪的是按钮的鼠标悬停效果仍然保留在标题栏中.看看这个屏幕:

第二个屏幕

这实际上是我的代码:

func moveButtons() {
    self.moveButtonDownFirst(self.window.standardWindowButton(NSWindowButton.CloseButton)!)
    self.moveButtonDownFirst(self.window.standardWindowButton(NSWindowButton.MiniaturizeButton)!)
    self.moveButtonDownFirst(self.window.standardWindowButton(NSWindowButton.ZoomButton)!)
}

func moveButtonDownFirst(button: NSView) {
    button.setFrameOrigin(NSMakePoint(button.frame.origin.x, button.frame.origin.y+10.0))
    self.fakeTitleBar.addSubview(button)
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*nyi 6

您需要添加工具栏并更改窗口属性titleVisibility。这里有更多细节NSWindow Style Showcase

let customToolbar = NSToolbar()
window?.titleVisibility = .hidden
window?.toolbar = customToolbar
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明