我有一个以编程方式内置的带有 PageControl 的 UIPageViewController。我有一个跟踪可以分页的 View Controller 的数组,我试图让 PageControl 显示与当前 View Controller 相关的点页面。
我有以下用于向后和向前分页的代码:
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.index(of: viewController) else {
return nil
}
let previousIndex = vcIndex - 1
guard previousIndex >= 0 else {return nil}
guard viewControllerList.count > previousIndex else {return nil}
self.pageControl.currentPage = previousIndex
return viewControllerList[previousIndex]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
guard let vcIndex = viewControllerList.index(of: viewController) else {return nil}
let nextIndex = vcIndex + 1
guard viewControllerList.count != nextIndex else {return nil}
guard viewControllerList.count > nextIndex else {return nil}
self.pageControl.currentPage = nextIndex
return viewControllerList[nextIndex]
}
当我将 PageControl 的当前页面设置为 nextIndex 或 previousIndex 时,我相信它应该为正在显示的当前 View Controller 的页面显示正确的点,但是它经常错过中间索引(总共三个点).它通常只是在第 1 个和第 3 个点之间来回移动,并且不准确。
如果有更好的方法,我也会接受其他答案。
最佳答案
是因为你把pageControl的当前索引设置错了。您必须将其设置为:
func pageViewController(UIPageViewController, willTransitionTo: [UIViewController])
在手势驱动的转换开始之前调用。
或
func pageViewController(UIPageViewController, didFinishAnimating: Bool, previousViewControllers: [UIViewController], transitionCompleted: Bool)
在手势驱动的转换完成后调用。
这两个方法都来自 UIPageViewControllerDelegate
关于arrays - UIPageControl 未正确更新为 UIPageViewController 中当前页面的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48069297/