我看到一个奇怪的情况。我在导航栏中放置了一个搜索栏,并将 UISearchDisplayController 与搜索栏链接起来。现在,当用户单击搜索栏时,搜索显示控制器倾向于隐藏导航栏(因此也隐藏搜索栏)。为了解决这个问题,我对 UISearchDisplayController 进行了子类化并实现了以下代码:-
- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
[super setActive: visible animated: animated];
[self.searchContentsController.navigationController setNavigationBarHidden: NO animated: NO];
}
现在,这解决了原来的问题。我能够搜索并导航到其他控制器。
但是,假设我在视图控制器 A 上进行搜索,然后单击搜索结果,然后将视图控制器 B 推送到导航堆栈上。现在,如果我弹出视图控制器 B 并返回到 A,那么我的导航栏就会消失。看起来搜索显示控制器处于活动状态,因此它隐藏了导航栏。
如果我使搜索显示控制器处于非活动状态,然后按下视图控制器 B,然后弹出它,则会出现导航栏。
那么,有什么方法可以让我的搜索显示控制器保持活动状态,并且当我从导航堆栈中弹出视图控制器 B 时导航栏不会消失?
我的目标是iOS6
(这是一个很长的代码,所以不确定我应该在这里发布什么)。
好吧,以防万一,如果有人遇到这种情况。我针对上述情况实施了变通办法。
问题是,当我从导航堆栈中弹出视图控制器 B 时,searchDisplayController 在视图控制器 A 中仍然处于活动状态。现在,searchDisplayController 假定搜索栏应始终位于导航栏下方(据我所知)。因此,当视图控制器A再次显示时,它没有显示导航栏。为了解决这个问题,我在视图控制器 A 的 viewWillLayoutSubviews 函数中编写了以下代码。
-(void)viewWillLayoutSubviews
{
if(self.searchDisplayController.isActive)
{
[UIView animateWithDuration:0.001 delay:0.0 options:UIViewAnimationOptionTransitionCrossDissolve animations:^{
[self.navigationController setNavigationBarHidden:NO animated:NO];
}completion:nil];
}
[super viewWillLayoutSubviews];
}
上面提供了一个动画,以便当用户弹出视图控制器 B 时,视图控制器 A 显示其搜索栏已激活(如果用户在进入视图控制器 B 之前曾尝试搜索任何内容)。这不是一个非常平滑的过渡,但它有效:) ....
注意:- 不要在中使用上述代码viewDidLoad
or viewDidAppear
函数,因为它可能会提供不需要的动画。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)