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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了导航栏在iOS 9.2中显示错误的导航项相关的知识,希望对你有一定的参考价值。

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

重现步骤:

  1. UIViewController推到UINavigationController堆栈上
  2. 在导航控制器上设置navigationBarHidden = YES
  3. 将另一个视图控制器推入导航堆栈。
  4. 开始交互式弹出过渡,然后取消它。
  5. 弹回到上一个视图控制器
  6. 在导航控制器上设置navigationBarHidden = NO
  7. 尝试将视图控制器推入堆栈

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


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

答案
@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];
    }
}
另一答案

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

以上是关于导航栏在iOS 9.2中显示错误的导航项的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中,导航栏在运行时不可见

在 iOS 11 上,导航项中的搜索栏在导航弹出时折叠并卡在状态栏下

底部应用栏在使用片段导航时向上/向下滑动(导航架构组件)

iOS 7 导航栏在翻转水平 Segue 上跳转

导航栏在横向模式下向上移动 - iOS

Swift ios导航栏在被滚动隐藏后不会出现