【发布时间】:2016-07-15 02:07:20
【问题描述】:
我正在尝试在 Xcode 7.x 中构建一个故事板,其中在 UINavigationController 中嵌入了超过 4 个连续的视图控制器。 导航控制器是初始视图控制器。 Embedded 是一个简单的视图控制器,只包含一个按钮,它连接到一个 Adaptive Show Segue,调用一个类似的视图控制器等等。每个人都通过一个简单的 Show Segue 调用下一个。 Push 仅适用于 3 次连续调用,此后对导航控制器的引用丢失。 第 5 个视图控制器及以后的视图控制器以模态方式呈现。
至少从 iOS 8 开始,我在不同的项目中遇到了这个问题。
UINavigationController viewControllers 堆栈是否限制为 4 个条目?
More than 4 view controllers embedded in an UINavigationController
嵌入式视图控制器的代码:
class ViewController: UIViewController {
override func viewDidAppear(animated: Bool) {
super.viewDidAppear(animated)
print("ViewCintroller:\(title) NavController:\(navigationController) stack size:\(navigationController?.viewControllers.count)")
print()
}
}
输出:
ViewController:Optional("V1") NavController:Optional(<UINavigationController: 0x7fd57b024200>) stack size:Optional(1)
ViewController:Optional("V2") NavController:Optional(<UINavigationController: 0x7fd57b024200>) stack size:Optional(2)
ViewController:Optional("V3") NavController:Optional(<UINavigationController: 0x7fd57b024200>) stack size:Optional(3)
ViewController:Optional("V4") NavController:Optional(<UINavigationController: 0x7fd57b024200>) stack size:Optional(4)
ViewController:Optional("V5") NavController:nil stack size:nil
ViewController:Optional("V6") NavController:nil stack size:nil
将所有 segues 更改为已弃用的推送类型会导致所需的结果:
ViewController:Optional("V1") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(1)
ViewController:Optional("V2") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(2)
ViewController:Optional("V3") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(3)
ViewController:Optional("V4") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(4)
ViewController:Optional("V5") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(5)
ViewController:Optional("V6") NavController:Optional(<UINavigationController: 0x7fc8a1026200>) stack size:Optional(6)
编辑:
在我看来,问题出在界面构建器上。 我得到了一个可行的解决方案,将所有 show segues 更改为 push segues,编译,将 push segues 更改回 show segues,再次编译,异常消失了。导航堆栈不再局限于 4 个视图控制器。
【问题讨论】:
标签: ios swift uinavigationcontroller