在页面之间滑动时,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
始终预加载相邻网页,包括首页翻页?