防止使用页面视图控制器在视图之间滑动时更新视图控制器

问题描述 投票:0回答:1

我的一个视图在主页上有很多数据调用。目前,当我滑动到另一个视图时,它的速度非常慢。 PageViewController的代码如下:

struct PageViewController: UIViewControllerRepresentable {

    var viewControllers: [UIViewController]
    ...
    func makeUIViewController(context: Context) -> UIPageViewController {
        let pageViewController = UIPageViewController(
            transitionStyle: .scroll,
            navigationOrientation: .horizontal)

        pageViewController.dataSource = context.coordinator

        return pageViewController
    }

    func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
        pageViewController.setViewControllers(
            [viewControllers[0]], direction: .forward, animated: true)
    }

    class Coordinator: NSObject, UIPageViewControllerDataSource {

        var parent: PageViewController

        init(_ pageViewController: PageViewController) {
            self.parent = pageViewController
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                 return nil
             }

            if index == 0 {
                return nil
            }

            return parent.viewControllers[index - 1]
        }

        func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
            guard let index = parent.viewControllers.firstIndex(of: viewController) else {
                return nil
            }
            if index + 1 == parent.viewControllers.count {
                return nil
            }
            return parent.viewControllers[index + 1]
        }
    }

}

有没有办法在用户每次向后滑动时不更新视图?

ios swift uiviewcontroller navigation swiftui
1个回答
0
投票

使用以下内容

func makeUIViewController(context: Context) -> UIPageViewController {
    let pageViewController = UIPageViewController(
        transitionStyle: .scroll,
        navigationOrientation: .horizontal)

    pageViewController.dataSource = context.coordinator
    pageViewController.setViewControllers(          // << move here !!
        [viewControllers[0]], direction: .forward, animated: true)

    return pageViewController
}

func updateUIViewController(_ pageViewController: UIPageViewController, context: Context) {
   // do something here only if some model/states changed
}
© www.soinside.com 2019 - 2024. All rights reserved.