带macOS Mojave暗模式的NSPopover背景色(包括三角形)
Swift 4.2、Xcode 10、macOS 10.14 我已经创建了下面的带macOS Mojave暗模式的NSPopover背景色(包括三角形),macos,cocoa,appkit,nspopover,macos-mojave,Macos,Cocoa,Appkit,Nspopover,Macos Mojave,Swift 4.2、Xcode 10、macOS 10.14 我已经创建了下面的NSView子类,我将它放在故事板中所有nspover实例的根视图上。但我注意到,当我在macOS Mojave中切换颜色模式时(从暗到亮或相反),它不会更新我的nspover的背景色 class PopoverMain:NSView{ override func viewDidMoveToWindow() { guard let frameView = window?.contentView?.supe
NSView
子类,我将它放在故事板中所有nspover
实例的根视图上。但我注意到,当我在macOS Mojave中切换颜色模式时(从暗到亮或相反),它不会更新我的nspover
的背景色
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)
}
}
我相信这是因为颜色模式转换只调用这些方法(),而不调用viewdimovetowindow():
updateLayer()
draw(:)
layout()
updateConstraints()
有没有人想出一种可靠的方法来给
nspover
(包括它的三角形)的背景上色,并让它在macOS Mojave上无缝工作?很有趣的是,写下你的问题会导致一个解决方案(有时很快)。我意识到我需要创建另一个NSView
子类,负责生成加载到nspover
中的NSView
。注意添加了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()
}
}
仅仅扩展
PopoverMain
updateLayer()
的方法,并按照您链接的Apple Doc源代码中的建议在内部设置backgroundView.backgroundColor(color:color(名为:“MyColor”)!
难道不可行吗?当在appdelegate中声明pover时,您将如何使用它:let poover=nspover()?