C'est effectivement un bug dans UIPageViewController. Il se produit uniquement avec le défilement de style (UIPageViewControllerTransitionStylescroll) et qu'après l'appel de setViewControllers:direction:animated:completion:
animés:OUI. Il y a donc deux solutions:
N'utilisez pas de UIPageViewControllerTransitionStylescroll.
Ou, si vous appelez setViewControllers:direction:animated:completion:
, utilisez uniquement animated:NO
.
Pour voir le bug clairement, appelez - setViewControllers:direction:animated:completion:
et ensuite, dans l'interface utilisateur), accédez à gauche (retour) à la page précédente manuellement. Vous revenez à la page incorrecte: non pas la page précédente, mais la page que vous étiez lorsque setViewControllers:direction:animated:completion:
a été appelé.
La raison pour le bug semble être que, lorsque vous utilisez le défilement de style, UIPageViewController fait un peu de tri interne de la mise en cache. Ainsi, après l'appel à setViewControllers:direction:animated:completion:
, il ne parvient pas à effacer de sa mémoire cache interne. Il pense qu'il sait ce que la page précédente est. Ainsi, lorsque l'utilisateur navigue vers la gauche de la page précédente, UIPageViewController ne parvient pas à appeler la méthode de la source de données pageViewController:viewControllerBeforeViewController:
, ou des appels avec le mauvais affichage en cours de la manette.
J'ai posté un film qui démontre clairement comment faire pour voir le bug:
http://www.apeth.com/PageViewControllerBug.mov
MODIFIER Ce bug sera probablement corrigé dans iOS 8.