1

基本上我想做一个简单的关于窗口,它有一个统一的标题栏和窗口(即纹理)和白色背景,就像 Xcode 的关于窗口: Xcode 的关于窗口

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

[about setBackgroundColor:[NSColor whiteColor]];

虽然对于其他颜色(如红色和蓝色),窗口似乎可以很好地改变颜色,但每当我使用 [NSColor whiteColor] 时,窗口看起来远没有 Xcode 的窗口那么明亮: 我的关于窗口:(

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

这是一个错误吗?或者它应该看起来真的是灰色的?我怎样才能使这个窗口“真正的白色”?

4

2 回答 2

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。

于 2017-02-14T22:58:56.150 回答
0

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

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

最终结果:

耶

编辑:我不久前提交了一份反馈助理报告,从 Yosemite DP 7 或 Xcode 6.1 开始,这个问题似乎已得到修复。设置纹理窗口的背景颜色现在会产生无色。

于 2014-07-31T18:33:45.237 回答