在iOS 9.2中,导航栏显示错误的导航项
在iOS 9.2中,导航栏显示错误的导航项,ios,objective-c,uiviewcontroller,uinavigationcontroller,uinavigationbar,Ios,Objective C,Uiviewcontroller,Uinavigationcontroller,Uinavigationbar,UINavigationController的navigationBar最初将显示正确的UINavigationItem,但每次将UIViewController推到堆栈上时,都将恢复到上一个UINavigationItem 复制步骤: 将UIViewController推到UINavigationController堆栈上 在导航控制器上设置navigationBarHidden=YES 将另一个视图控制器推到导航堆栈上 开始交互式pop转换,然后取消它 弹回到上一个视图控制器 在导航控制器上
UINavigationController的
navigationBar最初将显示正确的UINavigationItem,但每次将UIViewController推到堆栈上时,都将恢复到上一个UINavigationIte
m
复制步骤:
UIViewController
推到UINavigationControlle
r堆栈上navigationBarHidden=NO
看起来正在调用
-[UINavigationBar\u cancelInteractiveTransition]
,即使在进入此状态后的推送转换中也是如此?我可以在那个符号上设置一个断点,导航栏会在它前面显示正确的导航项,然后显示错误的导航项
但是我想要的是导航控制器的导航栏应该显示当前topViewController的导航项。我最近在iOS10上遇到了这个问题,我确信它在iOS9上也存在,假设我们仍然支持它。事实证明,问题在于,在交互转换开始时,我们设置了navigationController.navigationBarHidden=NO,然后在取消时忘记将其设置回navigationController.navigationBarHidden=YES。导航栏似乎不喜欢连续两次取消隐藏。我可以想象,将其设置为连续隐藏两次也是一样的。好消息是,这不是iOS11的问题。我最近在iOS10上遇到了这个问题,我确信它在iOS9上也存在,假设我们仍然支持它。事实证明,问题在于,在交互转换开始时,我们设置了navigationController.navigationBarHidden=NO,然后在取消时忘记将其设置回navigationController.navigationBarHidden=YES。导航栏似乎不喜欢连续两次取消隐藏。我可以想象,将其设置为连续隐藏两次也是一样的。好消息是,这不是iOS11的问题。您能详细介绍一下这个答案吗?解释一下你的答案,这样它会更详细。你能详细解释一下这个答案吗?解释你的答案,使其更详细
@interface UINavigationController (Private)
- (void)_cancelInteractiveTransition:(float)arg1 transitionContext:(id)arg2;
@end
- (void)_cancelInteractiveTransition:(float)arg1 transitionContext:(id)arg2
{
BOOL hidden = self.isNavigationBarHidden;
if (hidden) {
[self setNavigationBarHidden:NO animated:YES];
}
[super _cancelInteractiveTransition:arg1 transitionContext:arg2];
if (hidden) {
[self setNavigationBarHidden:hidden animated:YES];
}
}