【问题标题】:How can I change window.rootViewController in Xcode 12's new SwiftUI App lifecycle?如何在 Xcode 12 的新 SwiftUI App 生命周期中更改 window.rootViewController?
【发布时间】:2020-10-17 00:54:00
【问题描述】:

我是 SwiftUI 的新手。我有一个新项目Test,运行 SwiftUI 界面和 SwiftUI App 生命周期。这个生命周期对于 iOS 14 和 Xcode 12 来说是新的。

我想在我的项目中使用 Github 包 BetterSheet。我已经添加了包依赖项。但是,如Basic Usage section of the readme 中所述,我必须使用SceneDelegate.swift 中的工作表支持来初始化UIHostingController,如下所示:

window.rootViewController = UIHostingController.withBetterSheetSupport(rootView: ContentView())

由于新生命周期的性质,我的应用没有 SceneDelegate.swift。我有 TestApp.swift 代替:

@main
struct TestApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

我想在我的项目中使用 BetterSheet 包,但第一步似乎妨碍了我。我该如何解决这个问题?

【问题讨论】:

  • 创建一个使用 SceneDelegate 的新项目。
  • 回应您的评论,这似乎是最好的做法。新的 SwiftUI 生命周期太新了,目前缺少文档。
  • 我不会说缺少文档,更多的是开发人员坚持希望将 UIKit 范例用于 SwiftUI 应用程序,而 Apple 显然正试图做相反的事情。

标签: ios swift swiftui


【解决方案1】:

我怀疑你可以做这样的事情,based on their UIHostingController+BetterSheet.swift 代码。

@main
struct TestApp: App {
    let coordinator = BetterSheetCoordinator()
    var body: some Scene {
        WindowGroup {
            BetterSheetSupport(coordinator: coordinator) {
                ContentView()
            }
        }
    }
}

但我会质疑这个图书馆的价值。带有标准库的 iOS 14 中的工作表演示工作得很好,而且库本身已经 14 个月没有更新了。

【讨论】:

  • 感谢您的回答。我现在正在尽最大努力实现这一点,但是即使在重新启动 Xcode 并导入 BetterSheet 之后,在范围内查找 BetterSheetCoordinatorBetterSheetSupport 时也会遇到一些问题(一旦我得到,我将标记为已接受的答案它工作)。我想使用这个包的原因是因为 SwiftUI 的 Sheet 视图可以通过滑动手势移动/关闭,而我试图拥有一个无法移动的工作表视图。
  • 您可能正在寻找fullScreenCover()
  • 而有问题的类型可能是库内部的,所以如果不将代码方向导入项目,您可能无法做到这一点。
  • 我将使用 fullScreenCover()。你是对的,类型是库内部的。
  • BetterSheet 附加一个 UIViewControllerRepresentable 结构以启用下拉以关闭回调,这在 SwiftUI 工作表中是不可能的
猜你喜欢
  • 2020-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多