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

标签 ios uikit

我一直在 iOS 上测试我们的应用程序,我注意到在 iOS 14 上发生了一种奇怪的行为,但在 iOS 13 上并没有发生。它与导航堆栈及其工作方式有关。
假设我有一个 [A, B, C] 的导航堆栈,其中 C 当然是最顶层的 View Controller 。我在 C View Controller 中有一个按钮,它获取导航堆栈,删除 C,然后删除 B,最后它添加了一个新的 View Controller D。然后我将新堆栈设置为导航 Controller 。
在 iOS 13 上,结果堆栈为 [A, D]。
在 iOS 14 上,生成的堆栈是 [C, A, D]。不知何故,它并没有让我从堆栈中删除当前的 View Controller ,但它确实添加到了堆栈的底部。
我唯一的解释是它与 iOS 14 中的新导航历史功能有关(长按后退按钮)。不知何故,这对导航堆栈的管理引入了一些新的限制。
希望有人可以帮助我理解新行为。

最佳答案

我在最新的 iOS 14 中也遇到了类似的问题 - 如果我使用 setViewControllers:animated:UINavigationController ,而不是用作为参数提供的 View Controller 数组完全替换导航堆栈,它保留当前最顶层的 View Controller ,并将新的 View Controller 推送到它上面。
基本上,如果您当前的 View Controller 堆栈是:

[V1, V2, V3,... Vn]
而你使用 setViewControllers:animated有一个论点:
[X1, X2, X3,... Xn]
转换后,您的 View Controller 堆栈将是:
[Vn, X1, X2, X3,... Xn]
此错误不会在 iOS 13 及更低版本上发生。

关于ios - 关于iOS 14导航栈管理的问题(不同于iOS 13),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63485966/

相关文章:

iphone - 在唯一的 NSIndexPath 和唯一的 NSUInteger(或 int)之间转换

ios - 根据 Swift 中的文本大小调整 labelSize

ios - XML 到 NSDictionary 的 NSArray

c# - Xamarin iOS 同步运行具有返回值的任务

ios - UICollectionViewCell:AutoLayout - 大小计算不正确(偏移 exacatly 10 pt)

ios - 如何在不使用 IBaction/InterfaceBuilder 的情况下调用 UISwitch 触摸

ios - 如何在 UIWebView 中显示本地网络 url 的身份验证挑战?

ios - 在 iOS 中执行 Google+ 时出错

iphone - 如何在键盘处于事件状态时隐藏 iPhone 上的文本字段光标

iphone - 为什么 self 实现的 getter 应该保留并自动释放返回的对象?