关于iOS 14导航栈管理的问题(不同于iOS 13)

Cri*_*lae 12 uikit ios

我一直在 iOS 上测试我们的应用程序,我注意到在 iOS 14 上发生了一种奇怪的行为,但在 iOS 13 上没有发生。它与导航堆栈及其工作原理有关。

假设我有一个 [A, B, C] 导航堆栈,其中 C 当然是最顶层的视图控制器。我在 C 视图控制器中有一个按钮,它获取导航堆栈,删除 C,然后删除 B,最后它添加一个新的视图控制器 D。然后我将新堆栈设置为导航控制器。

在 iOS 13 上,结果堆栈是 [A, D]。在 iOS 14 上,结果堆栈为 [C, A, D]。不知何故,它没有让我从堆栈中删除当前的视图控制器,但它确实添加到了堆栈的底部。

我唯一的解释是它与 iOS 14 中的新导航历史功能有关(长按后退按钮)。不知何故,这对导航堆栈的管理引入了一些新的约束。

希望有人可以帮助我理解新行为。

Apo*_*eja 6

我在最新的 iOS 14 中也面临类似的问题 - 如果我setViewControllers:animated:UINavigationController, 而不是完全用作为参数提供的视图控制器数组替换导航堆栈,它会保留当前最顶层的视图控制器,并推送在它之上的新视图控制器。

基本上,如果您当前的视图控制器堆栈是:

[V1, V2, V3,... Vn]
Run Code Online (Sandbox Code Playgroud)

并且您使用setViewControllers:animated以下参数:

[X1, X2, X3,... Xn]
Run Code Online (Sandbox Code Playgroud)

转换后,您的视图控制器堆栈将是:

[Vn, X1, X2, X3,... Xn]
Run Code Online (Sandbox Code Playgroud)

此错误不会在 iOS 13 及更低版本上发生。