MacOS 应用程序无法将 SwiftUI 视图实例化为根视图控制器
MacOS app unable to instantiate SwiftUI view as a root view controller
我正在尝试加载 SwiftUI 视图作为 macOS 应用程序的第一个视图控制器,不幸的是它在 macOS window 中没有显示任何内容。以下是我为 macOS 编写应用程序委托的方式。
class AppDelegate: NSObject, NSApplicationDelegate {
let contentView = NSHostingController(rootView: ContentView.init())
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let storyBoard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
let window = storyBoard.instantiateController(withIdentifier: "Main Window") as! NSWindowController
window.contentViewController = contentView
}
}
内容视图
struct ContentView: View {
var body: some View {
Text.init("Hello World!")
}
}
这是输出
我的目标是为 macOS 设置 rootViewController,这个视图控制器是用 SwiftUI 制作的。非常感谢任何帮助。
我假设您只看到 window 的初始 window 控制器自动从故事板创建,而没有看到您以编程方式创建的 window 因为内容视图大小为零。
因此 a) 确保初始 window 控制器已停用
和 b) 添加内容视图的大小(你需要这个,因为你以编程方式执行所有操作),例如
struct ContentView: View {
var body: some View {
VStack {
Text("Hello World!")
}
.frame(width: 800, height: 600) // << here !!
}
}
更新: 将创建的 window 控制器存储到本地 属性
class AppDelegate: NSObject, NSApplicationDelegate {
let contentView = NSHostingController(rootView: ContentView())
private var window: NSWindowController! // << here !!
...
window.contentViewController = contentView
window.showWindow(nil)
使用 Xcode 13 / macOS 11.6 进行测试(在从头开始创建的测试项目上)
我正在尝试加载 SwiftUI 视图作为 macOS 应用程序的第一个视图控制器,不幸的是它在 macOS window 中没有显示任何内容。以下是我为 macOS 编写应用程序委托的方式。
class AppDelegate: NSObject, NSApplicationDelegate {
let contentView = NSHostingController(rootView: ContentView.init())
func applicationDidFinishLaunching(_ aNotification: Notification) {
// Insert code here to initialize your application
let storyBoard = NSStoryboard(name: NSStoryboard.Name("Main"), bundle: Bundle.main)
let window = storyBoard.instantiateController(withIdentifier: "Main Window") as! NSWindowController
window.contentViewController = contentView
}
}
内容视图
struct ContentView: View {
var body: some View {
Text.init("Hello World!")
}
}
这是输出
我的目标是为 macOS 设置 rootViewController,这个视图控制器是用 SwiftUI 制作的。非常感谢任何帮助。
我假设您只看到 window 的初始 window 控制器自动从故事板创建,而没有看到您以编程方式创建的 window 因为内容视图大小为零。
因此 a) 确保初始 window 控制器已停用
和 b) 添加内容视图的大小(你需要这个,因为你以编程方式执行所有操作),例如
struct ContentView: View {
var body: some View {
VStack {
Text("Hello World!")
}
.frame(width: 800, height: 600) // << here !!
}
}
更新: 将创建的 window 控制器存储到本地 属性
class AppDelegate: NSObject, NSApplicationDelegate {
let contentView = NSHostingController(rootView: ContentView())
private var window: NSWindowController! // << here !!
...
window.contentViewController = contentView
window.showWindow(nil)
使用 Xcode 13 / macOS 11.6 进行测试(在从头开始创建的测试项目上)