使用`UIPageViewController`预加载页面,包括在第一页翻页

时间:2017-08-16 15:54:04

标签: ios uipageviewcontroller

在页面之间滑动时,UIPageViewController可以很好地确保下一个/上一个内容页面已加载并准备就绪。这很棒,但是有一个问题:它在调用setViewControllers之后在第一页上没有这样做(见下文)。我怀疑这可能是一种节省效率的方法,因为它的常见理由是用户从不滑动。无论哪种方式,我都不会将此视为一个错误。

所以我可以(差点)在第一页翻页时辞职。在此之后,一切都应该顺利。但是我的问题是,在一种情况下,我经常根据用户输入动态地进一步调用setViewControllers,因此在这种情况下,预加载会被有效地破坏。

我想要的是告诉UIPageViewController始终预加载相邻网页的API - 我知道用户会一直刷卡。如果做不到这一点,我最好的解决方法就是:

let page = getContentPage()
myPageViewController.setViewControllers([page], direction: .forward,
                                        animated: true, completion: nil)

// Here we must manually pre-load 
let nextPage = pageViewController(myPageViewController, viewControllerAfter: page)
nextPage?.loadViewIfNeeded()     // 1.                           
nextPage?.view.layoutIfNeeded()  // 2.

这半工作:我现在预先加载了视图(1.),这节省了明显的时间。

我的问题是自动布局。很明显,UIPageViewController的预加载也可以提前很好地处理布局,而我的手动方法在翻页时仍然会有明显的延迟。在(2.)中添加layoutIfNeeded确实会提示布局,但我仍然会在页面转向处观察到进一步的调用(要清楚:这只适用于我在尚未看到的页面上的手动方法)。更糟糕的是,当我打电话时(2.)页面没有正确布局 - 例如UILabel未正确包装其文字内容。

如何有效模拟或提示UIPageViewController始终预加载相邻网页,包括首页翻页?

0 个答案:

没有答案