Вставить представление SwiftUI в представление AppKit - PullRequest
2 голосов
/ 03 апреля 2020

У меня есть представление 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()) )
    }
}

с соответствующей раскадровкой:

storyboard

После того, как код построен, результат пустое окно:

enter image description here

Я хочу вот что:

enter image description here

Как мне это сделать?

1 Ответ

1 голос
/ 03 апреля 2020

Вы настраиваете подпредставление программно, поэтому вы несете ограничения, не исключение для 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
}
...