我要求将NSWindow的标题栏更改为红色。 当我改变背景颜色时,整个窗口变红了。
我只想更改标题背景颜色。
感谢。
答案 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)
}
}
并安排如下:
使用这些窗口设置:
导致:
小心;拥有权利的同时也被赋予了重大的责任。注意不要让界面难以用于有红绿色盲的人。看看上面的图片,我可能会选择比NSColor.red更浅的红色,因为它的黑暗有点模糊了标题。但你可以尝试一下,直到你得到一些看起来不错的东西。