私のアプリは、画面の大部分を占めるUIPageViewController
のレイアウトと、下部にあるUITabBar
のレイアウトを持っています。アニメーションが中断された場合、iOS - UIPageViewController didFinishAnimatingデリゲートメソッドが呼び出されない
ユーザーが左右にスワイプして同時にUITabBar
をタップすると、基本的にUIPageViewController
が遷移しているときに、別の画面に切り替えることによって遷移が中断されます。次のようになります。
pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
代理人メソッドが呼び出されます。ただし、
pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
デリゲートメソッドは呼び出されません。奇妙何は、ユーザーが
UITabBar
を使用してUIPageViewController
にスイッチバックした後、viewDidAppear
が現在画面上にレンダリングされものではありませんコンテンツのViewControllerで呼び出されていることです。上の例
、私は2つのタブを持って 私UITabBar
からTab1
とTab2
。ユーザーはTab1
に添付されたUIPageViewController
のVC1
とVC2
の間でスワイプすることができ、Tab2
にはVC3
が付けられています。
ユーザーはTab1
になり、画面にはUIPageViewController
の中にVC1
と表示されます。ユーザーがUIPageViewController
をVC1
からVC2
にスワイプし、同時にTab2
をタップすると(これは本当にすばやく行う必要があります) pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
が呼び出されます。しかし、pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
は呼び出されません。
次に、ユーザーがTab1
をタップしてUIPageViewController
に戻ります。 viewDidAppear
はVC1
で呼び出され、VC2
は実際に画面に表示されます。
私はこれが端的なケースであり、潜在的にアップルのバグであると理解しています。以前に誰かがこれに遭遇したかどうか、そしてこれに対する回避策/解決策があるのかどうか疑問に思っていますか?
これはまさに私が遭遇したことであり、回避策として 'UIPageViewController'以外のスクリーン上のすべての要素にディスエーブルロジックを適用しました。私がバグとして分類した理由は、2番目のページが画面上にレンダリングされているにもかかわらず、箇条書き2の場合です。 'ViewDidLoad'は秒の代わりに最初のページで呼び出されます。 – Shawn
それは変です。私がスワイプを始めると、次のページのviewDidLoadが呼び出されます。私はページが最初に読み込まれてから提示される必要があると考えています。また、すべてのページが読み込まれると、そのページのviewDidLoadは決して再び呼び出されません。あなたのバグを再現できないようです。 – NSAdi
私の間違い申し訳ありませんが、私はviewDidAppear – Shawn