gpt4 book ai didi

ios - UISearchDisplayController 隐藏导航栏

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:21 24 4
gpt4 key购买 nike

我看到一个奇怪的情况。我在导航栏中放置了一个搜索栏,并将 UISearchDisplayController 与搜索栏相关联。现在,搜索显示 Controller 倾向于在用户单击搜索栏时隐藏导航栏(因此,也隐藏搜索栏)。为了解决这个问题,我继承了 UISearchDisplayController 并实现了以下代码:-

- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
[super setActive: visible animated: animated];
[self.searchContentsController.navigationController setNavigationBarHidden: NO animated: NO];
}

现在,这解决了原来的问题。我能够搜索并导航到其他 Controller 。

但是,假设我在 View Controller A 上进行搜索,然后单击搜索结果,然后将 View Controller B 推送到导航堆栈中。现在,如果我弹出 View Controller B 并返回到 A,那么我的导航栏就会消失。看起来搜索显示 Controller 处于事件状态,因此它隐藏了导航栏。

如果我使搜索显示 Controller 处于非事件状态,然后按下 View Controller B 并弹出它,则会出现导航栏。

那么,当我从导航堆栈中弹出 View Controller B 时,有什么方法可以使我的搜索显示 Controller 保持事件状态并且导航栏不会消失?

我的目标是 iOS6

(这是一个很长的代码,所以不确定我应该在这里发布什么)。

最佳答案

好的,以防万一,如果有人遇到这种情况。我针对上述情况实现了变通办法。

问题是,当我从导航堆栈中弹出 View Controller B 时,searchDisplayController 在 View Controller A 中仍然处于事件状态。现在,searchDisplayController 假定搜索栏应始终位于导航栏下方(AFAIK)。因此,当再次显示 View Controller A 时,它没有显示导航栏。为了解决这个问题,我在 View Controller 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];
}

上面提供了一个动画,以便当用户弹出 View Controller B 时, View Controller A 显示其搜索栏已激活(如果用户在进入 View Controller B 之前曾尝试搜索任何内容)。这不是一个非常平稳的过渡,但它有效:) ....

注意:- 不要在 viewDidLoadviewDidAppear 函数中使用上面的代码,因为它可能会提供不需要的动画。

关于ios - UISearchDisplayController 隐藏导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18538535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com