如何使用swift为OS X应用程序的标题栏着色

时间:2016-03-01 12:13:09

标签: swift macos cocoa nswindow

Example

我正在使用Xcode 7.2.1和Swift 2来开发OS X应用程序。我希望应用程序充满色彩。我怎么做上面的示例图片?

我这样做是为了摆脱标题栏:

  override func viewDidAppear() {
    super.viewDidAppear()

   self.view.wantsLayer = true


    self.view.window?.titlebarAppearsTransparent = true
    self.view.window?.movableByWindowBackground = true
    self.view.window?.titleVisibility = NSWindowTitleVisibility.Hidden

}

4 个答案:

答案 0 :(得分:5)

<强>替代

如果您只想为整个NSWindow设置背景颜色并隐藏标题栏,您可以将其styleMask设置为纹理:

self.view.window?.styleMask = NSTexturedBackgroundWindowMask
self.view.window?.backgroundColor = NSColor.redColor()

这样做的优点:它向后兼容至少OS X 10.6

答案 1 :(得分:2)

如果我移动你的&#34;摆脱标题栏&#34;代码到AppDelegate并设置window.backgroundColor,如下所示:

import Cocoa

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!

    func applicationDidFinishLaunching(aNotification: NSNotification) {
        // Insert code here to initialize your application

        window?.titlebarAppearsTransparent = true
        window.movableByWindowBackground = true
        window.titleVisibility = NSWindowTitleVisibility.Hidden
        window.backgroundColor = NSColor.redColor()

        let viewController = ViewController()
        window.contentViewController = viewController
    }

    func applicationWillTerminate(aNotification: NSNotification) {
        // Insert code here to tear down your application
    }
}

然后只需在视图控制器中设置颜色:

override func viewDidLoad() {
    super.viewDidLoad()
    view.wantsLayer = true
    view.layer?.backgroundColor = NSColor.redColor().CGColor
}

我最终得到了这个窗口 enter image description here

有趣的是,我必须在两个地方设置颜色,所以也许@ joshua-nozzi建议的解决方案是更安全的选择

答案 2 :(得分:0)

在创建窗口后,只需将其添加到您的AppDelegate中即可:

window.titlebarAppearsTransparent = true
window.backgroundColor = .red

在OSX 10.15上进行了测试,并创建了一个作为SwiftUI应用程序的项目。

答案 3 :(得分:-2)

添加带有背景颜色的自定义子视图。或者(更好)将该自定义视图设置为窗口的内容视图。