UIPageViewController 显示错误数据

Posted

技术标签:

【中文标题】UIPageViewController 显示错误数据【英文标题】:UIPageViewController displays wrong data 【发布时间】:2018-06-15 10:06:13 【问题描述】:

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

当我关闭 pageController 时,它会被正确释放,并且我不会捕获单独显示在其中的单个控制器。尽管如此,当我使用不同的数据集再次打开 pageController 时,有时我会看到前一个数据集的另一页。

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

    我用两张图片打开页面控制器,一只猫和一只狗 我关闭了页面控制器,它被正确地释放了 我再次打开它,这次是三幅图像,一匹马、一只鸟和一头牛 除了这三页之外,我还看到第四页展示了之前的猫

这就是我的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】:

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

malex 回答中的第二点是关键:如果我调用setViewControllers 而没有像pageViewController.setViewControllers([controllers[0]], direction: .forward, animated: false, completion: nil) 这样的动画,则问题不再出现。

我只能想象 UIPageViewController 的动画代码中存在一些错误,它使显示的页面之一保持活动状态。无论如何,由于我实际上不需要设置初始控制器的动画,因此可以很好地解决此问题。

【讨论】:

以上是关于UIPageViewController 显示错误数据的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 空白页

UIPageViewController 改变大小?

UIPageControl(页面控件)不显示在 UIPageViewController

UIPageViewController 显示黑屏

UIPageViewController - 每个页面显示不同的 Webview

UIPageViewController 委托、数据源和接口错误