在将SceneDelegate添加到我的Flutter iOS项目后,当应用程序启动时,我开始遇到黑屏。我通过创建一个名为SceneDelegate.swift的文件添加了SceneDelegate,代码如下。
import Flutter
@available(iOS 13.0, *)
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
func scene(
_ scene: UIScene,
willConnectTo session: UISceneSession,
options connectionOptions: UIScene.ConnectionOptions
) {
guard let windowScene = scene as? UIWindowScene else {
return
}
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else {
preconditionFailure("unable to obtain AppDelegate")
}
let window = UIWindow(windowScene: windowScene)
let flutterEngine = FlutterEngine(name: "FlutterEngine")
flutterEngine.run()
GeneratedPluginRegistrant.register(with: flutterEngine)
let viewController = FlutterViewController(
engine: flutterEngine,
nibName: nil,
bundle: nil
)
window.rootViewController = viewController
window.makeKeyAndVisible()
self.window = window
}
}
字符串
我的AppDelegate看起来像这样
import Flutter
import UIKit
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
guard #available(iOS 13, *) else{
let flutterEngine = FlutterEngine(name: "FlutterEngine")
flutterEngine.run()
GeneratedPluginRegistrant.register(with: flutterEngine)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
型
和我的信息。plist看起来像这样
.
.
.
UIApplicationSceneManifest
UIApplicationSupportsMultipleScenes
UISceneConfigurations
UIWindowSceneSessionRoleApplication
UISceneDelegateClassName
$(PRODUCT_MODULE_NAME).SceneDelegate
.
.
.
型
我只支持iOS 14及以上版本。
我试着通过添加日志语句来查看SceneDelegate中的代码是否会被执行,代码确实会执行。尽管如此,屏幕还是黑的。
我也尝试在一个新的Flutter项目中重现这个问题,但无法做到。在新项目中一切正常。所以它是特定于我的Flutter项目的。我想知道我是否错过了向我的应用程序添加SceneDelegate所需的任何步骤。
2条答案
按热度按时间z8dt9xmd1#
注意事项:故事板中的视图控制器中的视图有一个默认的白色背景色。这是与编程视图控制器中的视图没有默认背景色相比的。如果你不设置视图的背景色,你最终会得到一个黑色窗口。所以在viewDidLoad方法中设置视图控制器的视图颜色,就像这样view.backgroundColor = .白色:
字符串
pprl5pva2#
一个大骗局:我厌倦了尝试在AppDelegate中显示另一个屏幕,然后在SceneDelegate中运行FlutterEngine。我花了一天的大部分时间在上面,但毫无进展。
我想到的解决方案是在Xcode中将LaunchScreen的背景设置为黑色。然后LaunchScreen在黑色背景上显示徽标(或其他),然后它变为黑色,然后屏幕出现。
我希望有人想出一个更好的解决方案,但我没有更多的周期燃烧的启动画面。