swift - NSWindow : change positions of window buttons

标签 swift macos cocoa appkit

我想伪造一个标题栏(更大并且颜色不同),所以我现在的方法如下:

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

self.window.titlebarAppearsTransparent = true
self.window.styleMask |= NSFullSizeContentViewWindowMask    

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

这是结果:

WindowScreen

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

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

更新

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

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

Second screen

这实际上是我的代码:

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)
}

最佳答案

您需要添加工具栏并更改窗口属性titleVisibility。更多详情 NSWindow Style Showcase .

let customToolbar = NSToolbar()
window?.titleVisibility = .hidden
window?.toolbar = customToolbar

enter image description here

关于swift - NSWindow : change positions of window buttons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30085631/

相关文章:

ios - (Swift) 在 View Controller 之间传输数据

python - '库未加载 : @rpath/libcudart. 7.5.dylib' Mac 上的 TensorFlow 错误

xcode - 我如何在OSX Lion上为Xcode安装其他软件包以允许MacPorts工作

macos - 绑定(bind) nsrect 和 nstextfield

swift - NSView 的 swift 打印功能

swift ?必须后跟调用、成员查找或下标

ios - 不为特定设备下载点播资源

ios - 检查当前屏幕在 iOS 中是打开还是关闭

macos - Cocoa:如何制作一个类似finder的迷你工具栏?

objective-c - OpenGL透明纹理(混合)