【发布时间】:2015-10-28 09:26:36
【问题描述】:
我在UINavigationController 连续推送视图控制器时遇到问题。
有关信息,我使用 XCode 7.0,针对 iOS 8 构建,以及在 Simulator 9.0 上运行的应用程序。
这是用户手动点击 tableview 的单元格时的视图:
如上图所示,导航和后退按钮的标题正常渲染。
但是当我以编程方式执行此操作时,像这样(stack 是 UIViewController 的数组):
for controller in stack {
self.mainNavController.pushViewController(controller, animated: false)
}
或像这样使用 0.0 秒的延迟:
for controller in stack {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64((0.0 * Float(NSEC_PER_SEC)))), dispatch_get_main_queue(), {
self.mainNavController.pushViewController(controller, animated: false)
})
}
它会显示这样的最终结果(左边是无延迟,右边是有延迟):
请注意左侧屏幕截图中缺少导航标题(无延迟)和右侧屏幕截图中缺少返回按钮标题(有延迟)。
这个问题困扰了我好几天。知道为什么会这样吗?有谁知道如何解决这一问题?或者至少,解决这个问题?
提前致谢。
【问题讨论】:
-
你能分享你初始化并添加栏按钮项的代码吗?
-
您找到解决方法了吗?仍在使用 iOS 13.3
-
不。还是没有找到解决办法。只是一个解决方法。最后,我用我自己的栏按钮项覆盖了后退按钮,类似于下面接受的答案。
-
实际上对此进行了更多思考,我相信这可能是预期的行为。如果您手动打开第二个视图控制器,您将已经初始化并在屏幕上显示您的第一个视图控制器,因此它的导航将被设置。然后当第二个 vc 被推送时,导航控制器将使用第一个 vc 的导航项来显示返回按钮。但是,如果您以编程方式执行此操作,则第一个 vc 未初始化,并且导航控制器没有导航项可从中获取返回标题。
-
另外,鉴于 UINavigationController 函数
setViewControllers:animated,您不应该使用循环推送视图控制器
标签: ios swift uinavigationcontroller pushviewcontroller