取消iOS 7反向滑动手势后,导航堆栈变得不可用
我遇到了一个问题,在启动然后取消新的iOS 7反向滑动手势后,我的导航控制器变得不可用 一些相关信息:取消iOS 7反向滑动手势后,导航堆栈变得不可用,ios,uinavigationcontroller,ios7,uinavigationbar,Ios,Uinavigationcontroller,Ios7,Uinavigationbar,我遇到了一个问题,在启动然后取消新的iOS 7反向滑动手势后,我的导航控制器变得不可用 一些相关信息: 我的应用程序有一个带有各种活动页面的主页 主页将隐藏视图中的导航栏 主页取消隐藏视图中的导航栏将消失 -(void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; // Let's hide the navbar when we show the home view [self.na
- 我的应用程序有一个带有各种活动页面的主页
- 主页将隐藏视图中的导航栏
- 主页取消隐藏视图中的导航栏将消失
-(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]; }
- 只有在显示/隐藏导航栏时才会发生这种情况
- 我仍然可以慢慢地做背部姿势,只要我不取消这个姿势,一切都会很好
- 导航栏似乎可以工作,但点击后退按钮不会弹出视图控制器
- 我也遇到了同样的问题,在四处搜索之后,如果手势被取消,您似乎无法收到通知。手势识别器代理上没有
-shouldCancel
,导航控制器上没有-willReshowViewController
。因此,我在中设置了需要显示导航栏的视图控制器(即,正在取消的控制器)self.navigationController.navigationBarHidden=NO
-视图将出现
。这样,当取消手势并调用-viewwillbeen
时,导航栏将再次取消隐藏。据我所知,这是唯一一种在取消该手势时让“向后滑动”手势和“显示/隐藏导航栏”都不会出现问题的方法。不确定您是否已经解决了这个问题,但我面临的问题是相同的,但有一点不同。仅当我将动画设置为“否”时,导航堆栈才会出错
所以这是可行的:
[self.navigationController setNavigationBarHidden:YES animated:YES];
...
[self.navigationController setNavigationBarHidden:NO animated:YES];
但这并不是:
[self.navigationController setNavigationBarHidden:YES animated:NO];
...
[self.navigationController setNavigationBarHidden:NO animated:NO];
如果出于任何原因确实希望动画设置为“否”,一种解决方法是将alpha设置为0/1,而不是隐藏/取消隐藏导航栏:
- (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];
}
缺点是没有很好的幻灯片到弹出的过渡动画。如果你找到了更好的方法,一定要告诉我们
更新:这已经过时了,但我解决了我的问题,没有确保在当前视图的视图中更改的任何状态都将消失,而在视图中恢复。不要在视图中删除无法再次设置的内容
取消pop动画时会发生以下情况:
我想在这个美丽的新世界里,viewwilldefine/viewwillbefore并不总是意味着view“will”消失/出现:)我想我的解决方案可能会对你有所帮助 让我们假设主页视图控制器的类是HomePageViewController(类名),而活动视图控制器也被称为ActivityViewController(类名) 首先,在HomePageViewController的视图中将显示:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES];
}
其次,在ActivityViewController中,添加以下代码:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
- (void)viewWillDisappear:(BOOL)animated
{
//trick to fix navigationbar disappear problem that when UIScreenEdgePanGesture is happening.
if ([self.navigationController.topViewController isKindOfClass:[HomePageViewController class]]) {
[self.navigationController setNavigationBarHidden:YES animated:YES];
} else {
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
[super viewWillDisappear:animated];
}
我通过使用第二视图控制器的
视图中的动画:true
将出现和视图中的动画:false
将消失解决了这个问题
- (void)navigationController:(UINavigationController *)navigationController
didShowViewController:(UIViewController *)viewController
animated:(BOOL)animate
{
if ([self.navigationController respondsToSelector:@selector(interactivePopGestureRecognizer)])
{
if (self.navigationController.viewControllers.count > 1)
{
self.navigationController.interactivePopGestureRecognizer.enabled = YES;
}
else
{
self.navigationController.interactivePopGestureRecognizer.enabled = NO;
}
}
}
虽然不是最好的解决方案,但我只是在隐藏和显示导航栏时禁用了切换的滑动手势控制:self.navigationController.interactiveepgestureerecognizer.enabled=NO代码>谢谢你的建议。目前,我刚刚禁用了“向后滑动”功能。我不想让用户感到困惑;不知道刷卡何时/为什么在某些区域有效,而在其他区域无效。这为我解决了问题。非常感谢。这解决了这个问题,但在缺点方面,状态栏仍然认为导航控制器在它后面。如果导航控制器为暗色且主视图内容为浅色,则状态栏文本为白色(亮/白背景)。如果导航栏是用setNavigationBarHidden隐藏的,状态栏文本会在浅色背景上正确地切换为黑色。您最初的建议有效,但我不明白您的更新意味着什么。为什么[self.navigationController setnavigationbar隐藏:否动画:是]代码>还原状态,但[self.navigationController setnavigationbar隐藏:无动画:无]代码>不会?@Tree Hugger-在“更新:这已经很旧了,但我没有确保……”中的“不是”是一个错误吗?看起来您确实想确保,但正如所写,您是说您不想确保……这不一定有效-viewwillbeen
在取消手势时不会被调用,以我的经验来看。(iOS 11)