如何为NSWindow的标题栏上色

时间:2017-12-11 18:48:56

标签: swift macos cocoa nswindow

我要求将NSWindow的标题栏更改为红色。 当我改变背景颜色时,整个窗口变红了。

我只想更改标题背景颜色。

感谢。

1 个答案:

答案 0 :(得分:0)

在Interface Builder的窗口的Attributes Inspector中,启用“透明标题栏”和“全尺寸内容视图”选项。然后,在窗口的内容视图顶部放置一个红色视图,它应显示在标题栏后面。

对于视图,我刚刚这样做了:

class RedView: NSView {
    // draw is simple; just fill the rect with red
    override func draw(_ dirtyRect: NSRect) {
        NSColor.red.set() // maybe experiment to find a better-looking shade of red
        dirtyRect.fill()
    }

    // provide an intrinsic content size, to make our view prefer to be the same height
    // as the title bar.
    override var intrinsicContentSize: NSSize {
        guard let window = self.window, let contentView = window.contentView else {
            return super.intrinsicContentSize
        }

        // contentView.frame is the entire frame, contentLayoutRect is the part not
        // overlapping the title bar. The difference will therefore be the height
        // of the title bar.
        let height = NSHeight(contentView.frame) - NSHeight(window.contentLayoutRect)

        // I just return noIntrinsicMetric for the width since the edge constraints we set
        // up in IB will override whatever we put here anyway
        return NSSize(width: NSView.noIntrinsicMetric, height: height)
    }
}

并安排如下:

enter image description here

使用这些窗口设置:

enter image description here

导致:

enter image description here

小心;拥有权利的同时也被赋予了重大的责任。注意不要让界面难以用于有红绿色盲的人。看看上面的图片,我可能会选择比NSColor.red更浅的红色,因为它的黑暗有点模糊了标题。但你可以尝试一下,直到你得到一些看起来不错的东西。