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

查看:15
本文介绍了取消 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.

注意事项

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

推荐答案

不确定你是否已经解决了这个问题,但我面临着同样的问题,但有一个区别.如果我将动画设置为 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.

更新:这已经过时了,但我通过不确保当前视图的 viewWillDisappear 中更改的任何状态在 viewWillAppear 中恢复来解决了我的问题.不要把 viewWillDisappear 中的东西拆掉,你不能重新设置.

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. 当前视图将消失
  2. 新视图将出现
  3. [取消...反转]
  4. 新视图将消失
  5. 新视图DidDisappear
  6. 当前视图将出现
  7. 当前视图DidAppear

<小时>

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


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

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

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