在 AppKit 视图中嵌入 SwiftUI 视图

Embed a SwiftUI view in an AppKit view

我有一个 SwiftUI 视图 MySwiftUIView:

import SwiftUI

struct MySwiftUIView: View {
    var body: some View {
        Text("Hello, World!")
    }
}

我想将它用作 AppKit 视图的一部分。我尝试了以下代码:

import Cocoa
import SwiftUI

class MyViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview( NSHostingView(rootView: MySwiftUIView()) )
    }
}

与相应的故事板:

构建代码后,结果为空 window:

我想要的是:

我该如何实现?

您以编程方式设置子视图,因此约束由您负责,SwiftUI 也不例外。

这是正确的变体(使用 Xcode 11.4 测试):

override func viewDidLoad() {
    super.viewDidLoad()

    let myView = NSHostingView(rootView: MySwiftUIView())
    myView.translatesAutoresizingMaskIntoConstraints = false

    self.view.addSubview(myView)
    myView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor).isActive = true
    myView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor).isActive = true
}