iOS:嵌套推送动画可能导致导航栏损坏

Posted

技术标签:

【中文标题】iOS:嵌套推送动画可能导致导航栏损坏【英文标题】:iOS: nested push animation can result in corrupted navigation bar 【发布时间】:2014-05-19 10:39:25 【问题描述】:

我是 ios 新手。我正在做一个项目,但遇到了这个错误。

基本上下面的代码是在点击一行时加载一个新的xib,if语句用于检查是否点击了特定的行。

if (#something) 
    UIViewController *controller = [[NSClassFromString(@"abcd") alloc] initWithNibName:@"abcd" bundle:nil];
    [self.navigationController pushViewController:controller animated:YES];
 else 
    methodsViewController.r = [sel objectForKey:@"cvb"];
    methodsViewController.m = [sel objectForKey:@"bnm"];
    #adding controller
    [self.navigationController pushViewController:controller animated:NO];

问题是,当我单击一行时,它会转到新页面,但是当我单击导航栏中的后退按钮时,上一页不会加载,而是显示一个黑色页面。它在日志中显示的错误是: 嵌套推送动画可能会导致导航栏损坏。在意外状态下完成导航转换。导航栏子视图树可能已损坏。

我搜索了所有类似的答案,但找不到解决方案。非常感谢您的帮助。

提前致谢

【问题讨论】:

【参考方案1】:

您可能在 Storyboard 中有一个 Segue,它会在选择表格行时触发。当您在选择一行时手动推动控制器时,会发生您描述的错误。您应该从情节提要中删除 segue。

编辑:更多细节:

我假设您使用故事板(设计窗口中有多个视图控制器)。如果你不使用它,我就走错了路。例如,从我的一个项目中截取此屏幕截图:

如果您已从“Row”控件拖动到右侧的视图控制器,则您创建了一个 segue。当您在左视图控制器的 tableview 中选择一行时,很可能会触发此 segue。如果您使用的是标准项目,那么这样的 segue 可能已经存在,并且不是您自己创建的。

当您选择一行时,segue 会“自动”触发。当您在代码中手动推送视图控制器时,可能会导致“第二次推送”干扰导航控制器。

您可以通过单击场景之间的粗线或圆形图标并按删除来删除转场。


如果您需要在选择行时不会自动触发的转场,您可以将其从该黄色图标控制并拖动到目标场景。应该会出现一个菜单,您可以选择“手动”下的选项之一。然后必须手动触发 segue,您可以在代码中执行以下操作:

[self performSegueWithIdentifier:@"SegueId" sender:self];

当您单击情节提要中的圆形转场图标时,您可以在“标识符”字段的属性检查器的实用程序窗口中设置一个标识符。该标识符是上面代码行中使用的字符串。

【讨论】:

我是ios新手,能不能说的详细点? @GeorgeK 我在答案中添加了更多细节。图片托管网站似乎有些问题 - 图片可能会在几分钟内显示出来【参考方案2】:

我因为忘记插入中断而被这个抓住了;在一个案例之后:在 switch() 语句中。 每个案例:有一个 [self performSegueWithIdentifier:... 我正在处理下一个案件并处决了其中两个 Segue 表演者。

【讨论】:

以上是关于iOS:嵌套推送动画可能导致导航栏损坏的主要内容,如果未能解决你的问题,请参考以下文章

向后滑动时嵌套推送动画可能导致导航栏损坏

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

UINavigationController 的自定义动画推送未正确呈现导航栏

在底部导航栏上推送新屏幕时出现颤振过渡动画问题

iOS 导航问题:推送 ViewController 后,会导致导航栏显示上一个 ViewController 的导航项

UIViewController 导航 - 在意外状态下完成导航转换。导航栏子视图树可能会损坏