UIPageViewController显示错误的数据

时间:2018-06-15 10:06:13

标签: ios swift uipageviewcontroller

我对UIPageViewController有一个奇怪的问题。我用它来显示几页数据。 如果页面超过两页,我让用户循环浏览它们,这意味着当在最后一页上滚动时,他将再次看到第一页。

当我解除pageController它被正确解除分配时,我不会捕获单独显示在其中的单个控制器。仍然当我用不同的数据集再次打开pageController时,我有时会看到前一个数据集中的另一页。

为了让我的问题更清楚一点,这就是一个例子:

  1. 我用两张图片打开页面控制器,一只猫和一只狗
  2. 我关闭了页面控制器,它被正确解除分配
  3. 我再次打开它,这次有三张图片,一匹马,一只鸟和一头牛
  4. 除了这三页之外,我还看到了第四张显示之前的猫
  5. 这就是UIPageViewController的设置方式:

    let pageViewController = UIPageViewController(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)
    let controllers = dataModels.enumerated().map { index, dataModel in
            let vc = DetailsController(model: dataModel)
            vc.view.tag = index
            return vc
        }
    pageViewController.delegate = self
    pageViewController.dataSource = controllers.count > 1 ? self : nil
    pageViewController.setViewControllers([controllers[0]], direction: .forward, animated: true, completion: nil)
    

    所以我的问题是:如果pageController被取消分配并且稍后再次打开时仍能以某种方式捕获旧数据,该怎么办?

1 个答案:

答案 0 :(得分:0)

找到了修复方法。我浏览了一下我可以在这里找到的与UIPageViewController相关的所有内容。导致我修复的答案就是这个问题,即使问题与我的问题没有直接关系:https://stackoverflow.com/a/48574512/6518431

malex答案中的第二点是至关重要的一点:如果我在没有动画的情况下调用setViewControllers pageViewController.setViewControllers([controllers[0]], direction: .forward, animated: false, completion: nil),则问题不再出现了。

我只能想象UIPageViewController的动画代码中存在一些错误,它会使其中一个显示的页面保持活动状态。无论如何,因为我实际上不需要设置初始控制器的动画,所以这可以作为修复工作。