在 AppKit 视图中嵌入 SwiftUI 视图

Wow*_*nch 9 macos storyboard appkit swift swiftui

我有一个 SwiftUI 视图MySwiftUIView

import SwiftUI

struct MySwiftUIView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

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

import Cocoa
import SwiftUI

class MyViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview( NSHostingView(rootView: MySwiftUIView()) )
    }
}
Run Code Online (Sandbox Code Playgroud)

与相应的故事板:

故事板

代码构建后,结果是一个空窗口:

在此输入图像描述

我想要的是这样的:

在此输入图像描述

我应该如何实现这一点?

Asp*_*eri 12

您以编程方式设置子视图,因此约束由您负责,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
}
Run Code Online (Sandbox Code Playgroud)