gpt4 book ai didi

macos - macOS Mojave 深色模式下的 NSPopover 背景颜色(包括三角形)

转载 作者:行者123 更新时间:2023-12-03 16:30:29 25 4
gpt4 key购买 nike

Swift 4.2、Xcode 10、macOS 10.14

我创建了以下 NSView 子类,并将其放在 Storyboard中所有 NSPopover 实例的 Root View 上。但我注意到,当我在 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()
  • 绘制(_:)
  • 布局()
  • updateConstraints()

有没有人找到一种可靠的方法来为 NSPopover(包括其三角形)的背景着色并使其在 macOS Mojave 上无缝运行?

最佳答案

有趣的是,写下你的问题会带来解决方案(有时很快)。我意识到我需要创建另一个 NSView 子类,负责生成加载到 NSPopover 中的 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()
}
}

关于macos - macOS Mojave 深色模式下的 NSPopover 背景颜色(包括三角形),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com