首页 文章

导航栏在iOS 9.2中显示错误的导航项

提问于
浏览
1

UINavigationController's navigationBar最初将显示正确的UINavigationItem,但每次将UIViewController推入堆栈时,它将恢复到之前的 UINavigationIte m .

重现步骤:

  • UIViewController 推到 UINavigationControlle r堆栈上

  • 在导航控制器上设置navigationBarHidden = YES

  • 将另一个视图控制器推入导航堆栈 .

  • 开始交互式弹出过渡,然后取消它 .

  • 弹回到上一个视图控制器

  • 在导航控制器上设置 navigationBarHidden = NO

  • 尝试将视图控制器推入堆栈


看起来 -[UINavigationBar _cancelInteractiveTransition] 正在被调用,即使在进入此状态后的推送转换中?我可以在该符号上设置断点,导航栏在它之前显示正确的导航项,之后显示错误的导航项 .


但我想要的是导航控制器的导航栏应该显示当前的topViewController的导航项 .

2 回答

  • 0
    @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];
        }
    }
    
  • 0

    我最近在iOS10上遇到了这个问题,我确信它在iOS9上,假设我们仍然支持它 . 事实证明,问题是在交互式转换开始时我们设置了navigationController.navigationBarHidden = NO,然后当它被取消时忘记将其设置回navigationController.navigationBarHidden = YES . 似乎导航栏不喜欢连续两次取消隐藏 . 我想像将它设置为连续两次隐藏也一样 . 好消息是这不是iOS11的问题 .

相关问题