我正在关注教程here,并且必须进行一些更改以适合我的项目(code of my variation here,抱歉我把它放在GitHub上,因为复制和粘贴有点冗长)。有时当我向右滑动到达最后一个VC时,它会自动关闭。其他时候它正常工作,如果我刷到最后一个VC它停留在那里,直到我再次向右滑动关闭它。我在代码中放置了print语句,以帮助我找到bug的位置。以下是print statements when it works和when it doesn't work。查看日志,由于完全相同的代码以相同的顺序访问,我不知道如何修复此错误。当转换样式为PageCurl
而不是Scroll
时,不会发生此问题。
答案 0 :(得分:0)
首先,您需要了解pageViewControllers的工作原理 加载第一页后,您开始滚动它的那一刻将尝试加载下一页。这仅适用于第一页。之后,一旦到达页面,它将预加载下一页(取决于方向)并准备好。
在您到达第5页的情况下,pageViewController将尝试预加载下一页,这将导致您的代码的这一部分
guard orderedViewControllersCount != nextIndex else {
print("last item in coachamrks going to dismiss")
self.dismissViewControllerAnimated(true, completion: nil)
return orderedViewControllers.first
}
并在您到达第5页时立即关闭viewController 这不是一个错误。它是pageViewController的默认行为。
我认为您有时会发现它的行为与您错误预期的方式相同的原因是,当您快速滚动页面时,pageViewController会因性能原因停止预加载页面。
你可以实现你想要的唯一方法是访问pageViewController里面的scrollView的一种hackish方式,但它不安全,如果Apple在未来的更新中更改了pageViewControllers的体系结构,可能会破坏你的应用程序。
我建议你在最后一页放一个按钮并使用它来关闭pageViewController。