【问题标题】:MacOS app unable to instantiate SwiftUI view as a root view controllerMacOS 应用程序无法将 SwiftUI 视图实例化为根视图控制器
【发布时间】:2021-11-23 16:19:41
【问题描述】:

我正在尝试将 SwiftUI 视图加载为 macOS 应用程序的第一个视图控制器,不幸的是它在 macOS 窗口中没有显示任何内容。以下是我为 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 制作的。非常感谢任何帮助。

【问题讨论】:

    标签: ios swift macos swiftui appdelegate


    【解决方案1】:

    我假设您只看到从情节提要自动创建的初始窗口控制器的窗口,并且由于内容视图为零大小而看不到您以编程方式创建的窗口。

    所以 a) 确保初始窗口控制器已停用

    和 b) 添加内容视图的大小(您需要这个,因为您以编程方式完成所有操作),例如

    struct ContentView: View {
        var body: some View {
            VStack {
                Text("Hello World!")
            }
            .frame(width: 800, height: 600)    // << here !!
        }
    }
    

    更新:将创建的窗口控制器存储到本地属性中

    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 测试(在从头开始创建的测试项目上)

    【讨论】:

    • 我已经做出相应的更改,禁用初始视图控制器并将框架添加到 VStack。这样做之后,我什至看不到窗口,可能是因为在应用程序委托方法的第三行我正在实例化窗口
    • 我做了不同的事情 - 将创建的窗口控制器(您将其命名为 window)存储到属性中并在创建后显示窗口。
    猜你喜欢
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2014-07-28
    • 2020-05-27
    • 1970-01-01
    • 2015-10-20
    相关资源
    最近更新 更多