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

时间:2016-02-11 08:47:28

标签: ios objective-c uiviewcontroller uinavigationcontroller uinavigationbar

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

重现步骤:

  1. UIViewController推送到UINavigationControlle堆栈
  2. 在导航控制器上设置navigationBarHidden = YES
  3. 将另一个视图控制器推入导航堆栈。
  4. 开始交互式弹出式转换,然后取消它。
  5. 弹回上一个视图控制器
  6. 在导航控制器上设置navigationBarHidden = NO
  7. 尝试将视图控制器推入堆栈
  8. 在进入此状态后,即使在推送转换时,看起来-[UINavigationBar _cancelInteractiveTransition]被调用了吗?我可以在该符号上设置断点,导航栏在它之前显示正确的导航项,然后显示错误的导航项。

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

2 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:0)

我最近在iOS10上遇到了这个问题,并且假设我们仍然支持它,那么我可以肯定它在iOS9上存在。原来的问题是,在交互式过渡开始时,我们设置了navigationController.navigationBarHidden = NO,然后在取消设置时忘记将其重新设置为navigationController.navigationBarHidden = YES。似乎导航栏不希望连续两次被隐藏。我可以想象,将其设置为连续两次隐藏也是如此。好消息是这不是iOS11的问题。