gpt4 book ai didi

在后台一段时间后将应用程序带到前台时 iOS 黑屏

转载 作者:可可西里 更新时间:2023-10-31 23:46:13 32 4
gpt4 key购买 nike

我正在尝试从我们的 iOS 应用程序中删除所有 Storyboard,因为在使用 Git 的团队中工作时它们会变得一团糟。

我现在在 AppDelegate 的 application(_:didFinishLaunchingWithOptions:) 方法中设置初始 ViewController:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

window = UIWindow(frame: UIScreen.main.bounds)
let launchViewController = LaunchView()
window!.rootViewController = launchViewController
window!.makeKeyAndVisible()

[...]

return true
}

LaunchView 是一个简单的 View Controller ,负责根据用户是否登录将用户路由到登录或主屏幕。

在此之前,LaunchView 在Main.storyboard 中设置为初始值。

我已经从 Info.plist 文件中删除了这些行:

<key>UIMainStoryboardFile</key>
<string>Main</string>

一切正常,除了当我们将应用程序留在后台几个小时而没有强制退出它(我不确定需要多少时间来重现它)然后将应用程序返回前台时,一个显示全黑屏幕,就好像根 Controller 消失了一样。我们必须终止该应用程序并重新打开它才能使用它。

这让我发疯,因为它真的很难重现,因为如果你让应用程序在后台运行几分钟,它就可以正常工作。我怀疑它与应用程序暂停状态有关,但我不太确定。

你知道问题出在哪里吗?

谢谢!

编辑

也许这与问题有关:在 LaunchView 上,我使用以下代码将用户发送到主屏幕(如果他已登录):

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }

let rootVC = UIStoryboard.main.rootViewController
if let snapshot = appDelegate.window?.snapshotView(afterScreenUpdates: true) {

rootVC.view.addSubview(snapshot);
appDelegate.window?.rootViewController = rootVC

UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: {
snapshot.layer.opacity = 0;
}, completion: { (status) in
snapshot.removeFromSuperview()
})
}
else {
appDelegate.window?.rootViewController = rootVC
}

iOS 是否有可能在某个时候删除 rootViewController?

最佳答案

原来问题与交换窗口rootViewController时涉及快照的过渡效果有关。

我删除了过渡效果并简单地更改了 rootViewController。现在一切正常!

在代码中,我改变了这个:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }

let rootVC = UIStoryboard.main.rootViewController
if let snapshot = appDelegate.window?.snapshotView(afterScreenUpdates: true) {

rootVC.view.addSubview(snapshot);
appDelegate.window?.rootViewController = rootVC

UIView.transition(with: snapshot, duration: 0.4, options: .transitionCrossDissolve, animations: {
snapshot.layer.opacity = 0;
}, completion: { (status) in
snapshot.removeFromSuperview()
})
}
else {
appDelegate.window?.rootViewController = rootVC
}

对此:

guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let rootVC = UIStoryboard.main.rootViewController
appDelegate.window?.rootViewController = rootVC

谢谢大家的帮助!我希望这个答案对其他人有用。

关于在后台一段时间后将应用程序带到前台时 iOS 黑屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929876/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com