多次推送和弹出动画 NO 后导航栏的奇怪行为。 IOS 7

Posted

技术标签:

【中文标题】多次推送和弹出动画 NO 后导航栏的奇怪行为。 IOS 7【英文标题】:Strange behavior of NavigationBar after multiple push and pop with animation NO. iOS7 【发布时间】:2013-11-20 01:46:20 【问题描述】:

在 UINavigationController 上以编程方式执行多个弹出和推送操作时出现问题,动画 NO。 (仅限 iOS7 iPhone)

源代码 https://github.com/abhishek9284/NavigationBarTest

要了解问题,请考虑以下视图树。(我在我的应用程序中使用 UITableViewController) 右键单击并选择在新标签中打开图片以查看大图。

错误信息 右键单击并选择在新标签中打开图片以查看大图。

执行以下导航时出现错误/问题。

    手动逐一推送视图并转到 D 视图。 (PUSH:根>字母>A>B>C>D) 使用 popToViewController 以编程方式一次弹出多个视图并返回根视图。 (POP : Root 以编程方式推送并转到 2 视图。 (PUSH : 根 > 数字 > 1 > 2)

在上面的第 2 步和第 3 步中,使用动画 NO 以编程方式弹出和推送完成,这使得 UINavigationBar 后退按钮和标题非常奇怪。

注意:上述问题仅在 iOS 7 中出现,并且在 iOS 6 中完美运行。

【问题讨论】:

我不清楚到底是什么问题。 你能上传一张奇怪的图片吗? @nhgrif 添加了代码链接和应用程序图像以便更好地理解。 @JuJoDi 添加了代码链接和应用程序图片以便更好地理解。 【参考方案1】:

★☆★ 已解决 ★☆★

问题原因

-(void)viewDidAppear:(BOOL)animated 方法中执行 push 或 pop 会使导航堆栈不稳定。

解决方案

为推送或弹出相关进程创建单独的方法,并从另一个视图控制器调用该方法(避免在内部推送或弹出 -(void)viewDidAppear:(BOOL)animated)

push 操作后调用方法[self.navigationController.view layoutSubviews]; 布局子视图。

【讨论】:

【参考方案2】:

为了技术准确性,不应直接调用 layoutSubviews,即使它确实有效。查看 Apple 文档了解更多信息。

【讨论】:

以上是关于多次推送和弹出动画 NO 后导航栏的奇怪行为。 IOS 7的主要内容,如果未能解决你的问题,请参考以下文章

链 UIViewControllers 推送和弹出动画与 UINavigationController 关闭/呈现模式视图?

如何禁用 NavigationView 推送和弹出动画

自定义推送和弹出动画 iOS 7 和 8

如何在ios中自定义推送和弹出动画时将视图传递给另一个控制器? [关闭]

UIToolbar 推送视图问题

在动画推送和弹出时,导航项中带有搜索栏的连续视图控制器会导致视图模糊[重复]