Swift 4.2,Xcode 10,macOS 10.14
我创建了以下NSView
子类,并将其放在情节提要中所有NSPopover
实例的根视图上。但是我注意到,当我在macOS Mojave中切换颜色模式(从暗到亮或以其他方式)时,它不会更新我的NSPopover
的背景色。
class PopoverMain:NSView{
override func viewDidMoveToWindow() {
guard let frameView = window?.contentView?.superview else { return }
let backgroundView = NSView(frame: frameView.bounds)
backgroundView.backgroundColor(color: Color(named: "MyColor")!)
backgroundView.autoresizingMask = [.width, .height]
frameView.addSubview(backgroundView, positioned: .below, relativeTo: frameView)
}
}
我认为这是因为颜色模式转换仅调用以下方法(source),而不 viewDidMoveToWindow()
:
updateLayer()
draw(_:)
layout()
updateConstraints()
有人能找到一种可靠的方法来给NSPopover
(包括其三角形)的背景着色并使其在macOS Mojave上无缝工作吗?
答案 0 :(得分:3)
有趣的是,如何写下您的问题导致解决方案(有时很快)。我意识到我需要创建另一个NSView
子类,该子类负责生成NSView
并加载到NSPopover
中。请注意PopoverMainView
类的添加:
class PopoverMain:NSView{
override func viewDidMoveToWindow() {
guard let frameView = window?.contentView?.superview else { return }
let backgroundView = PopoverMainView(frame: frameView.bounds)
backgroundView.autoresizingMask = [.width, .height]
frameView.addSubview(backgroundView, positioned: .below, relativeTo: frameView)
}
}
class PopoverMainView:NSView {
override func draw(_ dirtyRect: NSRect) {
Color(named: "MyColor")!.set()
self.bounds.fill()
}
}