Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在iOS 9.2中,导航栏显示错误的导航项_Ios_Objective C_Uiviewcontroller_Uinavigationcontroller_Uinavigationbar - Fatal编程技术网

在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=YES
  • 将另一个视图控制器推到导航堆栈上
  • 开始交互式pop转换,然后取消它
  • 弹回到上一个视图控制器
  • 在导航控制器上设置
    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];
        }
    }