我的应用的布局为UIPageViewController
占据屏幕的大部分,UITabBar
位于底部。
我正面临边缘情况,用户向左/向右滑动并同时点按UITabBar
,基本上当UIPageViewController
处于转换状态时,中断转换切换到不同的屏幕。发生以下情况,
调用pageViewController(_ pageViewController: UIPageViewController, willTransitionTo pendingViewControllers: [UIViewController])
委托方法。
但永远不会调用pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool)
委托方法。
在用户使用UIPageViewController
切换回UITabBar
之后,我们会发现viewDidAppear
在内容ViewController上调用了UITabBar
,而不是当前的内容在屏幕上呈现。
例如,
我的Tab1
- Tab2
和VC1
有两个标签。用户可以在附加到VC2
的{{1}}中的UIPageViewController
和Tab1
之间滑动,VC3
附加到Tab2
。
现在,用户位于Tab1
,VC1
内的屏幕上显示UIPageViewController
。如果用户在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
。
我知道这是一个边缘案例,可能是Apple的错误。想知道是否有人之前遇到过此问题,是否有任何解决方法/解决方案?
答案 0 :(得分:1)
我遇到了这个问题。
如果更改选项卡,则转换时会发生变化,然后ViewController会发生变化。因此,控件从PageViewController转移到新的ViewController。 这就是委托回调停止的原因。
如果切换回PageViewController,您可能会注意到以下两点之一:
加载初始页面。如果您在切换标签之前刷过不到一半的页面,就会发生这种情况。
加载下一页(初始页面之后的页面)。如果您在切换标签之前已经翻过了一半以上的页面,就会发生这种情况。
它不完全是一个错误,只是控制在Cocoa中流动的方式。
没有这样的修复,但有一个解决方法。您可以在动画发生时禁用与TabBarController的交互,然后在完成后启用它。