【问题标题】:popViewController while pushViewController is animating resulting in corrupted navigation barpopViewController 而 pushViewController 动画导致导航栏损坏
【发布时间】:2014-10-16 09:19:06
【问题描述】:

我的应用程序中存在导航控制器pushViewController:animated:YES 由用户触发的情况。用户还可以通过点击另一个控件来触发popViewController:animated:YES。意图是 popViewController 是 pushViewController 的撤消或反转。

但是,如果用户触发popViewController:animated:YES 而 pushViewController 动画仍在发生,我会收到一条消息记录到控制台:

2014-08-22 08:26:36.601 MyApp[22380:60b] nested pop animation can result in corrupted    navigation bar
2014-08-22 08:26:36.960 MyApp[22380:60b] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

确实,导航栏确实损坏了:后退按钮不再可见。我必须去做其他事情,然后回到我的应用程序中受影响的页面,让它再次正常工作。

我能做些什么来避免这种竞争状况?我的第一个想法是保护popViewController 调用,检查当前导航动画是否已经发生,并等待它完成(甚至完全取消popViewController 调用)。但是,我还没有找到一种方法来检测已经发生的动作。

【问题讨论】:

  • 你在使用故事板吗?
  • @MohitPopat 不,这完全是程序化的。

标签: ios animation ios7 uinavigationcontroller


【解决方案1】:

这个问题有两种解决方案。我建议你实施第一个。

1 .通过为它们设置独占触摸来避免用户一次在多个控件上进行交互。

  • 如果这些控件共享 superView(父视图),则将这些控件的 ExclusiveTouch 属性设置为 YES,否则您必须将此属性设置为它们的父视图。

2 。在用户一次点击多个控件的视图控制器中实现 UINavigationControllerDelegate 协议。

 – navigationController:willShowViewController:animated:
 – navigationController:didShowViewController:animated:

在调用第一个委托方法时设置一个标志并在第二个中重置它。在每次推送/弹出操作中使用此标志。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多