小编Dan*_*lay的帖子

更新 @EnvironmentObject var 以将数据传递给 SwiftUI 中的 PageViewController 会导致 ViewController 之间的滑动丢失

在我的 SwiftUI 应用程序中,我目前有一个使用 UIKit 实现的 PageViewController。它遵循 Apple 的 SwiftUI UIKit 集成教程中概述的传统 SwiftUI - UIKit 实现。

我有填充 UIViewController 的数据,在传递给 PageViewController 的控制器数组中,由@Environment变量提供。在应用程序的不同屏幕中,您可以发出一个导致 Environment 对象更新的操作,触发位于 PageViewController 中的 ViewController 的重新渲染。

然而,这种重新渲染会导致问题,因为 ViewController 是用新标识符重新制作的,因此parent.controller在类协调器 pageViewController 函数内的数组中找不到 viewController 的索引。这会导致索引默认为 nil 并禁用更新的 viewController 上的任何滑动。我仍然可以使用页面控制点在 viewController 之间导航,但我想确定如何更新 parent.controller 数组以包含新的 ViewController 并丢弃旧的。

经过数小时的搜索、调试和修补,我一直无法找到一种方法来重置父控制器数组,用新的 ViewController 替换已丢弃的旧视图。下面是 PageViewController 的代码。

import SwiftUI
import UIKit

struct PageViewController: UIViewControllerRepresentable {
    var controllers: [UIViewController]
    @Binding var currentPage: Int

    func makeCoordinator() -> Coordinator {
        Coordinator(self)
    }

    func makeUIViewController(context: Context) -> …
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller uipageviewcontroller swiftui

5
推荐指数
2
解决办法
1979
查看次数