UIPageViewController 显示错误的数据
UIPageViewController displays wrong data
我有一个关于 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
怎么会被释放并且在稍后再次打开时仍然以某种方式捕获旧数据?
已找到修复方法。我浏览了在这里可以找到的与 UIPageViewController 相关的所有内容。导致我修复的答案是这个,即使这个问题与我的问题没有直接关系:
malex 回答中的第二点是关键:如果我调用 setViewControllers
没有像这样的动画 pageViewController.setViewControllers([controllers[0]], direction: .forward, animated: false, completion: nil)
,问题就不会再出现了。
我只能想象 UIPageViewController 的动画代码中存在一些错误,使显示的页面之一保持活动状态。无论如何,因为我实际上不需要设置初始控制器的动画,所以这可以很好地解决问题。
我有一个关于 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
怎么会被释放并且在稍后再次打开时仍然以某种方式捕获旧数据?
已找到修复方法。我浏览了在这里可以找到的与 UIPageViewController 相关的所有内容。导致我修复的答案是这个,即使这个问题与我的问题没有直接关系:
malex 回答中的第二点是关键:如果我调用 setViewControllers
没有像这样的动画 pageViewController.setViewControllers([controllers[0]], direction: .forward, animated: false, completion: nil)
,问题就不会再出现了。
我只能想象 UIPageViewController 的动画代码中存在一些错误,使显示的页面之一保持活动状态。无论如何,因为我实际上不需要设置初始控制器的动画,所以这可以很好地解决问题。