我以这种方式在viewDidAppear中启用interactivePopGestureRecognizer:
if ([self.navigationController respondsToSelector(interactivePopGestureRecognizer)]) {
self.navigationConroller.interactivePopGestureRecognizer.enabled = YES;
self.navigationController.interactivePopGestureRecognizer.delegate = self;
}
在每个推送/弹出的View Controller的生命周期中调用这段代码。如果滑动操作完成,则手势识别器可正常工作。但是,如果发生部分滑动,视图控制器将显示正确的视图,但导航栏会放错位置/显示早期的视图控制器导航栏。我使用自定义左右导航栏项而不是后退按钮。 我也尝试将代码放在不同的生命周期方法中,例如viewDidLoad,甚至尝试将委托设置为导航控制器本身。但结果并没有改变。我尝试在SO上搜索类似的问题,但无法找到正确的答案。我找到了一个链接,说明问题可能是因为直接在代码中调用生命周期方法(viewDidAppear,viewWillAppear)。但是在应用程序中没有这样的直接方法调用。其他链接提到了自定义leftBarButtonItem的问题。 任何帮助表示赞赏。
答案 0 :(得分:0)
您是否忘记为推送到导航控制器的viewcontroller子类调用[super viewWillAppear]或类似内容。似乎要记住,这可能会导致您描述的问题。如果没有调用超合适的布局方法,则不会在导航项/栏上调用。
答案 1 :(得分:0)
我遇到了类似的问题,其中部分滑动将当前视图(称为A)与早期(堆栈中较低的)viewcontroller的导航栏(称为B)一起离开。我通过在viewDidAppear方法中包含配置导航栏的代码以及viewcontroller A的viewWillAppear方法来解决它。看起来很尴尬,但是在部分滑动后返回A时它恢复了viewcontroller A的导航栏。对于它的价值,我发现这只是tableview控制器的问题,而不是标准的UIViewControllers。