弹出视图控制器导致奇怪的 navigationItem / backBarButtonItem 标题交换

Posted

技术标签:

【中文标题】弹出视图控制器导致奇怪的 navigationItem / backBarButtonItem 标题交换【英文标题】:Popping View Controller Results in Odd navigationItem / backBarButtonItem Title Swap 【发布时间】:2014-09-14 21:31:10 【问题描述】:

尝试为 ios 8 更新应用。

我有一组UITableViews,我们称它们为视图#1、视图#2 和视图#3。

当从视图#2 传递到视图#3 时,我加载视图#3,然后从堆栈中弹出视图#2。

在视图 #2 中,我正在使用以下代码:

// Load an instance of view #3 
ViewThree *viewController = [[ViewThree alloc] initWithNibName:@"ViewThree" bundle:nil];
UINavigationController * navigationController = self.navigationController;       

// Push view #3 to the top of the stack
[navigationController pushViewController:viewController animated:YES];

// Now pop view #2 from the stack
NSMutableArray *navigationArray = [[NSMutableArray alloc] initWithArray:navigationController.viewControllers];
[navigationArray removeObjectAtIndex:1];  
navigationController.viewControllers = navigationArray;

就推送和弹出视图而言,这工作正常。

我的问题是,当视图#3 出现时,分配给视图#3 的navigationItem.title 向左滑动,变成蓝色,并占据了为backBarButtonItem(后退按钮)保留的空间。

文本似乎对我的触摸有反应,但它没有返回到屏幕 #1。我必须关闭应用程序才能离开屏幕。

这似乎发生在我从 9 月 9 日开始运行 8.0 的 iPod Touch 上,但似乎从 9 月 9 日开始在我的 Xcode 模拟器上没有发生。

对这里发生的事情有什么想法吗?这在 iOS 7 上不会发生。


更新:我以为我通过删除 NavBar 标题解决了一半问题,但现在出现了 < Back 按钮,但大约 50% 的时间它不起作用。用户点击按钮,按钮的箭头部分变为浅蓝色,用户被卡在屏幕上。唯一的出路就是杀掉这个应用。

【问题讨论】:

嗨!看看这个post,下个断点,一步一步执行。我知道这不是世界上最有趣的事情,但它正在调试,并且几乎一直有效:) 希望它可以提供帮助。 你是如何从 view#1 导航到 view #2 的??是先将视图控制器推到视图 2,然后你弹出 view1 吗?? 【参考方案1】:

我的猜测是:因为你在更改堆栈时

// Push view #3 to the top of the stack
[navigationController pushViewController:viewController animated:YES];

正在进行(动画推送)并且 UI 操作不是线程安全的,您最终会得到格式错误的视图堆栈。

您可以尝试检查的是:

    将动画更改为 NO 从视图 #3 的 viewDidAppear 中的堆栈中移除视图 #2

【讨论】:

以上是关于弹出视图控制器导致奇怪的 navigationItem / backBarButtonItem 标题交换的主要内容,如果未能解决你的问题,请参考以下文章

从 UINavigationController (IOS 5) 弹出 UIViewController 时出现奇怪的动画

弹出视图控制器导致条形按钮项消失

故事板 - 弹出到视图控制器然后推送导致多次推送

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

拖动到弹出视图控制器会导致固定到底部的按钮跳转(使用标签栏)

圆形 UIButton 角导致奇怪的外观