取消iOS 7后滑动手势后,导航堆栈变得无法使用 [英] Navigation stack becomes unusable after canceling iOS 7 back swipe gesture

查看:128
本文介绍了取消iOS 7后滑动手势后,导航堆栈变得无法使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am running into an issue where my navigation controller becomes unusable after initiating then canceling the new iOS 7 back swipe gesture.

一些相关信息:


  • 我的应用程序有一个包含各种活动页面的主页。

  • 主页隐藏了viewWillAppear中的导航栏

  • 主页取消隐藏viewWillDisappear中的导航栏

  • My app has a home page with various activity pages.
  • The home page hides the navigation bar in viewWillAppear
  • The home page un-hides the navigation bar in 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];
}


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

When a user taps a activity icon on the home page the view controller for the activity is pushed onto the stack.

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

If a user starts to use the new back swipe gesture in iOS but then stops the gesture (i.e. decides not to go back) everything looks ok. However, if a user causes another view controller to get pushed on the nav stack the nag bar then becomes unusable and the user can not navigate back from the current view controller.

备注


  • 仅当我显示/隐藏导航栏时才会发生

  • 我仍然可以慢慢地执行后退手势,只要我不取消手势,一切都会正常工作

  • 导航条似乎会起作用但是按下后退按钮不会不要弹出视图控制器。

推荐答案

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

Not sure if you already resolved this but I'm facing the same issue but with one difference. The navigation stack only messes up if I setAnimated to NO.

这样可行:

[self.navigationController setNavigationBarHidden:YES animated:YES];
...
[self.navigationController setNavigationBarHidden:NO animated:YES];

但这不是:

[self.navigationController setNavigationBarHidden:YES animated:NO];
...
[self.navigationController setNavigationBarHidden:NO animated:NO];

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

If you really want animated to be NO for whatever reason, one work around is to set alpha to 0/1 instead of hiding/unhiding the 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];
}

缺点是没有漂亮的幻灯片到弹出过渡动画。如果您确实找到了更好的方法,请告诉我们。

The downside is that there's no nice slide-to-pop transition animation. If you did find a better way, do let us know.

更新:现在已经过时了,但我通过不确保在viewWillAppear中恢复当前视图中viewWillDisappear中更改的状态。不要在viewWillDis中删除你无法重新设置的内容。

UPDATE: This is now old but I solved my issue by not ensuring that whatever state is changed in current view's viewWillDisappear, is restored in viewWillAppear. Don't tear down things in viewWillDisappear that you can't setup again.

当你取消流行动画时会发生这种情况:

This is what happens when you cancel the pop animation:


  1. 当前viewWillDisappear

  2. 新viewWillAppear

  3. [已取消......撤消]

  4. 新viewWillDisappear

  5. 新viewDidDisappear

  6. 当前viewWillAppear

  7. 当前viewDidAppear

  1. Current viewWillDisappear
  2. New viewWillAppear
  3. [cancelled... reverses]
  4. New viewWillDisappear
  5. New viewDidDisappear
  6. Current viewWillAppear
  7. Current viewDidAppear






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


I guess in this brave new world, viewWillDisappear/viewWillAppear does not always mean view "will" disappear/appear :)

这篇关于取消iOS 7后滑动手势后,导航堆栈变得无法使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆