UIPageViewController -presentationCount 未触发

UIPageViewController -presentationCount not firing

问题:UIPageViewController页面之间的导航工作正常但是:
1) 导航点视图未显示
2) 一些数据源方法未调用(可能是 1 的原因。)

我有以下 UI 设置(基本上是 UITableViewCell 中的 UIPageViewController

UITableViewCell <- UIViewController <- ContainerView <- UIPageViewController

问题:

通话正常:

func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController?

func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController?

未调用:

func presentationCount(for pageViewController: UIPageViewController) -> Int
func presentationIndex(for pageViewController: UIPageViewController) -> Int 

viewDidLoad 之后完成所有设置:

dataSource = self
setViewControllers([viewController], direction: .reverse, animated: false, completion: nil)

注意:我在应用程序的其他地方直接在内容视图上使用另一个 UIPageViewController -> 所有委托方法都工作正常。另一个(可能直接相关的)问题是导航点视图不可见。 (在未嵌入的情况下再次工作正常)。

有人遇到过这样的事情吗? 为什么有些数据源委托方法会被调用而有些不会被调用?

几个小时以来,我一直在查看此代码以及我在 google 中可以找到的所有内容,但无法继续。

UIPageViewController Implementation

如果两种方法都实现,页面指示器将可见,过渡样式为'UIPageViewControllerTransitionStyleScroll',导航方向为'UIPageViewControllerNavigationOrientationHorizontal'。

这两种方法都是为了响应 'setViewControllers:...' 调用而调用的,但是在手势驱动导航的情况下会自动更新演示文稿索引。

根据 Apple 文档,您需要实现这两种方法并确保控制器的过渡样式为“滚动”。然后页面指示器将可见并调用函数。请检查这个。

用于页面指示器的可见性。在 viewdidload

中添加以下代码
var pageControl = UIPageControl.appearance()
pageControl.pageIndicatorTintColor = UIColor.lightGray
pageControl.currentPageIndicatorTintColor = UIColor.white
pageControl.backgroundColor = UIColor.black

func presentationCount(for pageViewController: UIPageViewController) -> Int {
    return orderedViewControllers.count
}
    
func presentationIndex(for pageViewController: UIPageViewController) -> Int {
    if let currentVC = self.viewControllers!.first {
        let currentIndex = orderedViewControllers.index(of: currentVC)
        return currentIndex!
    }else{
        return 0
    }
 }

根据 Apple 文档,您需要实现两种方法 ,确保控制器的过渡样式为 "scroll"。然后页面指示器将可见并调用函数。请检查这个。

其实Vishal是这么说的,但是不是很清楚:)