UINavigationController's
navigationBar最初将显示正确的UINavigationItem,但每次将UIViewController推入堆栈时,它将恢复到之前的UINavigationIte
m。
重现步骤:
UIViewController
推到UINavigationControlle
r堆栈上navigationBarHidden = NO
看起来像-[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的问题。