在 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
}
我有一个 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
}