UIPageViewController 乱序显示页面,从不调用 viewControllerBeforeViewController

Posted

技术标签:

【中文标题】UIPageViewController 乱序显示页面,从不调用 viewControllerBeforeViewController【英文标题】:UIPageViewController displays pages out of order and never calls viewControllerBeforeViewController 【发布时间】:2014-05-30 22:19:31 【问题描述】:

我有一个 UIPageViewController,我在 data source 上实现了两个可选方法来获取自动 UIPageControl。

我有以下在索引和视图控制器之间转换的辅助方法。

- (UIViewController *)viewControllerForIndex:(NSInteger)index;
- (NSInteger)indexFromViewController:(UIViewController *)viewController;

第一种方法创建一个新的视图控制器,将自身配置为特定索引,并将该索引存储在可检索的位置(即,由第二种方法访问的位置)。

我使用以下代码实例化我的页面视图控制器:

[pageViewController setViewControllers:@[[self viewControllerForIndex:0]]
                             direction:UIPageViewControllerNavigationDirectionForward
                              animated:NO
                            completion:nil];

这是我的数据源方法:

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController 
    NSInteger currentIndex = [self indexFromViewController:viewController];
    if (currentIndex == 0) 
        return nil;
     else 
        return [self viewControllerForIndex:currentIndex-1];
    


- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController 
    NSInteger currentIndex = [self indexFromViewController:viewController];
    if (currentIndex == self.data.count - 1) 
        return nil;
     else 
        return [self viewControllerForIndex:currentIndex+1];
    


- (NSInteger)presentationCountForPageViewController:(UIPageViewController *)pageViewController 
    return self.data.count;


- (NSInteger)presentationIndexForPageViewController:(UIPageViewController *)pageViewController 
    return 0;

当我向前导航时,一切正常,当我向后导航时,视图控制器开始以随机顺序出现。

我相信这与 pageViewController:viewControllerBeforeViewController: 从未被调用的事实有关。页面视图控制器仅调用 pageViewController:viewControllerAfterViewController:,即使我开始向后滑动。

UIPageViewController 在 storyboard 中配置如下:

导航:水平 过渡样式:滚动 脊柱位置:无 双面:否

如何让页面视图控制器以正确的顺序显示视图控制器?

更新:当我将代码复制到一个全新的项目中时,一切正常。我想我的新问题是您是否知道任何可能导致此行为的 pod、框架、链接器标志和其他设置?

如果我在当前页面视图控制器之上递归地呈现相同的页面视图控制器,则该错误会发生在视图控制器的每个奇数版本上。 (即它发生在第一个,第三个等)

【问题讨论】:

【参考方案1】:

它是Taplytics。

我运行的是1.2.34版本,更新到1.2.50后,问题解决了。

【讨论】:

以上是关于UIPageViewController 乱序显示页面,从不调用 viewControllerBeforeViewController的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 显示黑屏

UIPageViewController - 每个页面显示不同的 Webview

UIPageViewController 显示错误数据

UIPageViewController 不显示其视图控制器视图

UIPageViewController 中的 InputAccessoryView 默认不显示

在 UINavigationController 中嵌套 UIPageViewController 只显示一页