使 Cocoa NSWindow 半透明隐藏故事板元素

Making Cocoa NSWindow translucent hides storyboard elements

在我的应用委托中,我使用以下代码使 window 半透明:

func applicationDidFinishLaunching(_ aNotification: Notification) {
            let visualEffect = NSVisualEffectView()
    visualEffect.translatesAutoresizingMaskIntoConstraints = false
    visualEffect.material = .dark
    visualEffect.state = .active
    visualEffect.wantsLayer = true
    visualEffect.layer?.cornerRadius = 16.0


    NSApplication.shared.mainWindow?.titleVisibility = .hidden
    NSApplication.shared.mainWindow?.styleMask.remove(.titled)
    NSApplication.shared.mainWindow?.backgroundColor = .clear
    NSApplication.shared.mainWindow?.isMovableByWindowBackground = true

    NSApplication.shared.mainWindow?.contentView?.addSubview(visualEffect)

    guard let constraints = NSApplication.shared.mainWindow?.contentView else {
      return
    }

    visualEffect.leadingAnchor.constraint(equalTo: constraints.leadingAnchor).isActive = true
    visualEffect.trailingAnchor.constraint(equalTo: constraints.trailingAnchor).isActive = true
    visualEffect.topAnchor.constraint(equalTo: constraints.topAnchor).isActive = true
    visualEffect.bottomAnchor.constraint(equalTo: constraints.bottomAnchor).isActive = true
}

问题是故事板中的每个元素都不再可见。我怎样才能解决这个问题?谢谢

您需要将所有 UI 添加到 NSVisualEffectView 作为子视图或将 NSVisualEffectView 移到视图层次结构的后面:

NSApplication.shared.mainWindow?.contentView?.addSubview(visualEffect, positioned: .below, relativeTo: nil)

更新: 我在 Xcode 中创建了一个新的 macOS 项目,并在视图上添加了一个标签。然后我粘贴了你的代码,我唯一改变的是上面的代码行。有效。