【问题标题】:Prevent view controllers from updating when swiping between views with a Page View Controller使用页面视图控制器在视图之间滑动时防止视图控制器更新
【发布时间】:2020-04-05 02:55:51
【问题描述】:

我的一个视图在主页上有很多数据调用。目前,当我滑动到另一个视图时,速度非常慢。 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】:

    使用下面的

    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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2015-09-01
      • 1970-01-01
      相关资源
      最近更新 更多