取消iOS 7后滑动手势后,导航堆栈变得无法使用

cob*_*ber 26 uinavigationbar uinavigationcontroller ios ios7

我遇到了一个问题,我的导航控制器在启动然后取消新的iOS 7后滑动手势后变得无法使用.

一些相关信息:

  • 我的应用程序有一个包含各种活动页面的主页.
  • 主页隐藏viewWillAppear中的导航栏
  • 主页取消隐藏viewWillDisappear中的导航栏

    -(void) viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
    
        // Let's hide the navbar when we show the home view
        [self.navigationController setNavigationBarHidden:YES];
        …
    }
    
    -(void) viewDidDisappear:(BOOL)animated 
    {
        [super viewDidDisappear:animated];
    
        // Let's hide the navbar when we show the home view
        [self.navigationController setNavigationBarHidden:NO];
    }
    
    Run Code Online (Sandbox Code Playgroud)

当用户点击主页上的活动图标时,活动的视图控制器被推送到堆栈上.

如果用户开始在iOS中使用新的后滑动手势,但随后停止手势(即决定不返回),一切看起来都不错.但是,如果用户导致另一个视图控制器被推到导航堆栈上,那么唠叨条就会变得无法使用,并且用户无法从当前视图控制器导航回来.

笔记

  • 它只在我显示/隐藏导航栏时发生
  • 我仍然可以慢慢地执行后退手势,只要我不取消手势,一切都会正常工作
  • 导航栏似乎可以工作,但点击后退按钮不会弹出视图控制器.

Tre*_*ger 16

不确定你是否已经解决了这个问题,但我遇到了同样的问题,但有一点不同.如果我将setAnimated设置为NO,导航堆栈只会混乱.

这样可行:

[self.navigationController setNavigationBarHidden:YES animated:YES];
...
[self.navigationController setNavigationBarHidden:NO animated:YES];
Run Code Online (Sandbox Code Playgroud)

但这不是:

[self.navigationController setNavigationBarHidden:YES animated:NO];
...
[self.navigationController setNavigationBarHidden:NO animated:NO];
Run Code Online (Sandbox Code Playgroud)

如果你真的希望动画因为任何原因而变为NO,那么解决方法是将alpha设置为0/1而不是隐藏/取消隐藏NavigationBar:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    self.navigationController.navigationBar.alpha = 0.0f;
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.navigationController.navigationBar setAlpha:1.0f];
}
Run Code Online (Sandbox Code Playgroud)

缺点是没有很好的幻灯片到流行过渡动画.如果您确实找到了更好的方法,请告诉我们.

更新:现在已经过时了,但我通过不确保在viewWillAppear中恢复当前视图中viewWillDisappear中的任何状态而解决了我的问题.请勿在viewWillDis中删除您无法再次设置的内容.

这是取消弹出动画时发生的情况:


  1. 当前viewWillDisappear
  2. 新观点将会出现
  3. [取消......倒退]
  4. 新的viewWillDisappear
  5. 新的viewDidDisappear
  6. 当前viewWillAppear
  7. 当前viewDidAppear

我想在这个勇敢的新世界中,viewWillDisappear/viewWillAppear并不总是意味着视图"将"消失/出现:)