首页 文章

UIPageControl未正确更新到UIPageViewController中当前页面的索引

提问于
浏览
0

我有一个带有以编程方式内置的PageControl的UIPageViewController . 我有一个数组跟踪可以分页的视图控制器,我试图让PageControl显示与当前视图控制器页面相关的点 .

我有以下代码用于向后和向前翻页:

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时,我相信它应该显示正在显示的当前视图控制器的页面的正确点,但是它经常错过中间索引(总共有三个点) . 它通常只在第1点和第3点之间来回传递,并且不准确 .

如果有更好的方法,我会接受其他答案 .

1 回答

  • 1

    这是因为你将pageControl的当前索引设置在错误的位置 . 您必须将其设置为:

    func pageViewController(UIPageViewController, willTransitionTo: [UIViewController]) Called before a gesture-driven transition begins.

    func pageViewController(UIPageViewController, didFinishAnimating: Bool, previousViewControllers: [UIViewController], transitionCompleted: Bool) Called after a gesture-driven transition completes. 这两种方法都来自UIPageViewControllerDelegate

相关问题