纹理NSWindow与setBackgroundColor有一个微笑的灰色背景

时间:2014-07-29 01:12:45

标签: objective-c xcode cocoa nswindow osx-yosemite

基本上我想制作一个简单的窗口,它有一个统一的标题栏和窗口(即纹理)和白色背景,如Xcode关于窗口: Xcode's about window

所以我在IB中有一个带纹理的窗口,我通过绑定将它连接到我的app委托。然后我将这行代码添加到app delegate:

[about setBackgroundColor:[NSColor whiteColor]];

对于其他颜色,如红色和蓝色,窗口似乎改变了颜色,但每当我使用[NSColor whiteColor]时,窗口看起来远不如Xcode的窗口那么耀眼: My about window :(

有趣的是,当窗口处于非活动状态时,我最终获得了Xcode的白色: Inactive window

这是一个错误吗?或者它应该看起来真的很灰?如何让这个窗口成为“真正的白色”?

2 个答案:

答案 0 :(得分:1)

你不需要一个hacky解决方案(至少不再这样做)。

创建一个视图控制器,然后将其作为modal打开。在视图控制器的子类代码中,添加:

class YourVC: NSViewController {
  override func viewDidLoad() {
    super.viewDidLoad()
    //Set the background color to white
    self.view.wantsLayer = true
    self.view.layer?.backgroundColor = NSColor.white
  }
  override func viewDidAppear() {
    //Customize the window's title bar
    let window = self.view.window

    window?.styleMask.insert(NSWindowStyleMask.unifiedTitleAndToolbar)
    window?.styleMask.insert(NSWindowStyleMask.fullSizeContentView)
    window?.styleMask.insert(NSWindowStyleMask.titled)
    window?.toolbar?.isVisible = false
    window?.titleVisibility = .hidden
    window?.titlebarAppearsTransparent = true
  }
}

这是在Xcode 8中使用Swift 3。

答案 1 :(得分:0)

我找到了一个教程,使用了一个相当不错的ghetto hack来交换框架视图的drawRect:方法:http://parmanoir.com/Custom_NSThemeFrame

它甚至不需要你继承NSWindow,但我还是这样做,以防我想在另一个窗口或其他东西上使用它。

最终结果:

Yay

编辑:我暂时提交了一份反馈助理报告,截至Yosemite DP 7或Xcode 6.1,这个问题似乎已得到解决。设置纹理窗口的背景颜色现在会产生无色的颜色。