SwiftUI 只显示黑屏

SwiftUI only showing a black screen

大约 2 周前我去度假之前,我在 SwiftUI 中创建了几个非常好的项目。当我回来时,我更新了 Xcode 和我的 iPhone.

SwiftUI 的代码不相关,因为它之前工作得很好。我在多个项目测试中得到的只是一个普通的黑屏。

什么可能导致我的所有项目在更新 Xcode 和我的设备之前工作时只显示黑屏?

版本:

My device - 13.0 beta 4

Simulators don't work - not sure on versions

Xcode-beta - 11.0 beta 4 (11M374r)

尝试重新安装 Xcode 并查看 link 从 Xcode beta 3 迁移到 Xcode beta 4

从 beta 3 升级到 4 后,我也遇到了这个问题。我在 beta 4 中创建了一个新项目,并从旧项目复制了所有内容,它成功了。

SceneDelegate.swift中替换

let window = UIWindow(frame: UIScreen.main.bounds)
window.rootViewController = UIHostingController(rootView: ContentView())
self.window = window
window.makeKeyAndVisible()

if let windowScene = scene as? UIWindowScene {
    let window = UIWindow(windowScene: windowScene)
    window.rootViewController = UIHostingController(rootView: ContentView())
    self.window = window
    window.makeKeyAndVisible()
}

如果您最初将 .environtmentObject 附加到 ContentView(),请不要忘记将其添加到上面代码中的 ContentView()

当您在 Xcode beta 4 中创建新项目时,我发布的第二个代码块是在 SceneDelegate.swift 中自动生成的。我发布的第一个代码块是在 beta 4 之前的所有版本中自动生成的。正如您在第二个块中看到的那样,window 现在已使用 [=18] 提供的 scene 进行了初始化=] 函数 scene(scene:, session:, connectionOptions:) 而不是 CGRect (UIScreen.main.bounds).

此外,如果上述建议不起作用,请确保您的 Info.plist.

中有指向 SceneDelegate 的正确指针

在您的信息 plist 中替换此键值 -

<key>UIApplicationSceneManifest</key>
<dict>
    <key>UIApplicationSupportsMultipleScenes</key>
    <false/>
    <key>UISceneConfigurations</key>
    <dict>
        <key>UIWindowSceneSessionRoleApplication</key>
        <array>
            <dict>
                <key>UISceneConfigurationName</key>
                <string>Default Configuration</string>
                <key>UISceneDelegateClassName</key>
                <string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
            </dict>
        </array>
    </dict>
</dict>

SceneDelegate 如下所示 --

import UIKit
import SwiftUI

class SceneDelegate: UIResponder, UIWindowSceneDelegate {

    var window: UIWindow?

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: ContentView())
            self.window = window
            window.makeKeyAndVisible()
        }
    }
}

A​​ppDelegate 将是 -

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {}