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()
}
}
}
AppDelegate 将是 -
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {}
大约 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()
}
}
}
AppDelegate 将是 -
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {}