【问题标题】:iOS interactivePopGestureRecognizer causing views to display incorrect navigation bariOS interactivePopGestureRecognizer 导致视图显示不正确的导航栏
【发布时间】:2014-01-19 10:47:58
【问题描述】:

我以这种方式在 viewDidAppear 中启用了 interactivePopGestureRecognizer:

   if ([self.navigationController respondsToSelector(interactivePopGestureRecognizer)]) {
       self.navigationConroller.interactivePopGestureRecognizer.enabled = YES;
       self.navigationController.interactivePopGestureRecognizer.delegate = self;
   }

这段代码在每个推送/弹出视图控制器的生命周期中被调用。如果滑动操作完成,手势识别器将正常工作。但是,如果发生部分滑动,视图控制器会显示正确的视图,但导航栏会错位/显示较早的视图控制器导航栏。我正在使用自定义左右导航栏项目,而不是后退按钮。 我还尝试将代码放在不同的生命周期方法中,例如 viewDidLoad,甚至尝试将委托设置为导航控制器本身。但结果并没有改变。我尝试在 SO 上搜索类似问题,但找不到正确的响应。我确实找到了一个链接,该链接说问题可能是因为直接在代码中调用生命周期方法(viewDidAppear、viewWillAppear)。但是应用程序中没有这样的直接方法调用。其他链接提到了自定义 leftBarButtonItem 的问题。 任何帮助表示赞赏。

【问题讨论】:

  • 谁能帮帮我?

标签: ios iphone objective-c


【解决方案1】:

您是否忘记为推送到导航控制器的视图控制器子类调用 [super viewWillAppear] 或类似名称。似乎记得这可能会导致您描述的问题。如果不调用超适当的布局方法,则不会在导航项/栏上调用。

【讨论】:

  • 我不这么认为。我有一个基本视图控制器类,它通过超级调用正确实现所有生命周期方法。派生类也可以正确调用 super。
【解决方案2】:

我遇到了一个类似的问题,其中部分滑动离开了当前视图(称为 A)与较早的(堆栈中较低的)视图控制器的导航栏(称为 B)。我通过在 viewDidAppear 方法以及 viewcontroller A 的 viewWillAppear 方法中包含配置导航栏的代码来解决它。看起来很尴尬,但是在部分滑动后返回 A 时它恢复了 viewcontroller A 的导航栏。对于它的价值,我发现这只是 tableviewcontrollers 的问题,而不是标准 UIViewControllers 的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 2014-08-05
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多