UIPageViewController 方向只向前

Posted

技术标签:

【中文标题】UIPageViewController 方向只向前【英文标题】:UIPageViewController direction only forward 【发布时间】:2013-01-20 16:46:00 【问题描述】:

目标是创建一个只能向前导航的 UIPageViewController。我正在使用数据源为 UIPageViewController 提供内容。方向设置为UIPageViewControllerNavigationDirectionForward,过渡样式为UIPageViewControllerTransitionStyleScroll

实现

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

    // returns the next view controller

返回下一个视图控制器,而以下应该确保向后导航是不可能的

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

    return nil;

返回 nil 应该表明导航是不可能的(如文档中所述)。但是,我总是可以向后滚动一页。假设我有 10 页,我可以向前滚动所有页面,但在任何页面我都可以向后滚动 1 页。 (例如:在第 5 页我可以回到第 4 页,在第 8 页我可以回到第 7 页,依此类推。)

我知道我可以通过不使用数据源并使用 setViewControllers:direction:animated:completion: 方法来避免这种情况,但我想了解为什么我的尝试失败了。 p>

【问题讨论】:

【参考方案1】:

这是您在 pageViewController 将其转换样式设置为滚动时得到的行为——我不知道为什么,但它与将滚动视图插入到层次结构中的某处有关(我可以看到如果我在打开 Instruments 的情况下运行我的项目,则分配)。如果转换是 Page Curl,那么如果你在你做的地方返回 nil,你就不会显示任何上一页。

所以,我认为你一直坚持使用 setViewControllers:direction:animated:completion: 除非你想切换到 Page Curl 动画。

【讨论】:

谢谢。使用 PageCurl 确实有效。搜索结果找到了这个很好的答案:***.com/questions/12939280/… @mmvie,我不知道苹果为什么要这样设置——我注意到当你第一次向左滑动时(向前方向), viewControllerAfterViewController 被调用,然后是 viewControllerBeforeViewController ,如果样式设置为滚动,则再次查看控制器后视图控制器。我假设他们这样做是为了将适当的视图控制器添加到滚动视图中,这样您就可以在平移时看到当前的控制器以及之前和之后的控制器。 我也注意到了。他们确实确保下一个和上一个 viewController 始终在 pageViewController 的 viewController 列表中。可能是为了避免创建视图造成的任何延迟,从而创造良好的用户体验。我想知道如果方向设置为仅转发并且在 viewControllerBeforeViewController 中显式返回 nil 时,这是否是预期的行为... @mmvie,我不知道“预期”。这可能是加载滚动视图的意外结果,但我不会称其为错误。确实没有“仅向前”模式—— setViewControllers:direction:animated:completion: 的 forward 或 reverse 参数只是确定你跳转到特定页面时获得的动画——它与滑动时获得的方向。【参考方案2】:

这里有一个简单的解决方案,只需在协议中将 isLeftScrollEnabled 默认值设置为 false: UIPageViewController with configurable scroll directions

【讨论】:

以上是关于UIPageViewController 方向只向前的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController:从右到左的语言反转 .scroll 动画方向

UIPageViewController 和屏幕外方向更改

在 UIPageViewController 中获取用户滑动方向

UIPageViewController:如何处理视图控制器的不同方向?

UIPageViewController - 到下一个视图控制器的动画过渡与方向变化混合

仅在 UIPageViewController 上的某个方向上禁用用户滑动?