我有一个pageviewcontroller,但当我滑到第二页时,它会显示正确的控制器一瞬间,然后屏幕变白,如果我然后再次滑动它将显示应该是.它也有4页而不是我想要的3页.
这是一个演示问题的视频:https://streamable.com/i1inq
索引如下:
profileController.index = 0 discoverController.index = 1 matchController.index = 2 func pageViewController(_ pageViewController: UIPageViewController,viewControllerAfter viewController: UIViewController) -> UIViewController? { if index == 0 { index = discoverController.index return discoverController } else if index == 1 { index = matchController.index return matchController } return nil }
编辑:我还应该提到初始控制器是profileController,因此当应用程序运行时索引从0开始.
解决方法
更新
您只需使用index属性修改代码自定义viewcontroller:
func pageViewController(_ pageViewController: UIPageViewController,viewControllerAfter viewController: UIViewController) -> UIViewController? { let index = (viewController as? MyCustomVCWithIndexForPageViewController).index if index == 0 { index = discoverController.index return discoverController } else if index == 1 { index = matchController.index return matchController } return nil }
原版的
您不应该缓存与pageviewcontroller相关的参数.
UIPageViewController有时会预加载您的页面以获得更好的性能.
例如:
您有3页要显示.
然后滚动到第二个视图. viewControllerAfter与第一个viewcontroller的viewController一起调用,用于请求第二个viewcontroller.
并且viewControllerAfter再次使用第二个viewcontroller的viewController调用,以请求第三个viewcontroller(preload).
在这种情况下,如果您缓存索引,将导致不可预测的结果.