SwiftUI:在PageViewController上呈现模式

时间:2019-10-20 00:28:49

标签: swiftui uipageviewcontroller modal-view

我在使用UIPageViewController时遇到了一些问题。在其协调器的某个时刻,对UIViewControllers的引用无效。这会导致除关闭模式视图后的第一个页面之外的所有UIPageViewController页面都丢失。

作为基本SwiftUI教程Interfacing with UIKit的完成,按功能项在轻按时实现的模式视图演示。有github repo

我发现在modalview取消了pageViewController中的协调器之后,委托在最初创建的UIViewControllers进行几次重新创建时会寻找它们。因此,当我尝试滚动页面时,委托人找不到实际的UIViewControllers


        func pageViewController(
            _ pageViewController: UIPageViewController,
            viewControllerAfter viewController: UIViewController) -> UIViewController?
        {
            guard let index = __parent.controllers.firstIndex(of: viewController)__ else {
                return nil
            }

        }

如官方文档所述,协调器和UIPageViewController的同步应由UIViewControllerRepresentable负责

    /// Updates the presented `UIViewController` (and coordinator) to the latest
    /// configuration.
    func updateUIViewController(_ uiViewController: Self.UIViewControllerType, context: Self.Context)

我错过了什么吗?还是UIViewControllerRepresentable中的这个bug?如何在UIPageViewController上使用模式视图而不失去滚动页面的能力?

1 个答案:

答案 0 :(得分:1)

我有一个类似的问题,我通过致电pageViewController.setViewControllers(_:direction:animated:)

解决了

通过makeUIViewController(context:)函数而不是updateUIViewController(:)函数,因为前者仅被调用一次。