首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISearchDisplayController无法隐藏导航栏

UISearchDisplayController无法隐藏导航栏
EN

Stack Overflow用户
提问于 2013-11-20 18:30:13
回答 1查看 1.6K关注 0票数 3

我在用搜索栏看风景。当搜索变得活跃时,导航栏应该被激活(例如,像-[navigationController setNavigationBarHidden:animated:]一样)。

我已经使用UISearchDisplayController实现了这一点,它主要是做正确的事情,只是它没有隐藏导航条。视图层次结构如下所示:

代码语言:javascript
复制
UIWindow
+-> IIViewDeckController
  +->UINavigationController
    +->UITableViewController

我已经初始化了这样的东西:

代码语言:javascript
复制
- (void)viewDidLoad
{
    UISearchBar *searchBar = [[UISearchBar alloc] init];
    self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
    self.tableView.tableHeaderView = searchBar;
}

我还尝试使用不同的抽屉控制器来查看IIViewDeckController中是否存在问题,如下所示:

代码语言:javascript
复制
UIWindow
+-> MMDrawerController
  +->UINavigationController
    +->UITableViewController

通常,UISearchDisplayController应该从-[UISearchDisplayController setActive:animated:]的某个地方调用-[UINavigationController setNavigationBarHidden:animated:]。我甚至尝试创建一个从UISearchDisplayController派生的类,重载-[UISearchDisplayController setActive:animated:]并手动隐藏导航栏,如下所示:

代码语言:javascript
复制
- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
    [self.searchContentsController.navigationController setNavigationBarHidden:visible animated:animated];
    [super setActive:visible animated:animated];
}

清晰性更新:这段代码实际上确实像预期的那样隐藏了导航条,但它没有清除位于搜索栏以北的视图,而我最后在状态栏上看到了另一个视图(这有点道理,因为在通过-[UISearchDisplayController setActive:animated:]进行调试时,我发现它在隐藏导航栏时使用了一些私有API来清除刷新控制器。我认为。

由于某种原因,导航栏并没有隐藏,我一直在努力找出原因。

是什么导致了这种行为?

更新#2

看起来我在层次结构中漏掉了一个视图,而且在某种程度上它似乎是罪魁祸首(仍然不确定到底是哪种方式)。下面是:

代码语言:javascript
复制
UIWindow
+-> MMDrawerController
   +-> UINavigationController
      +-> UITabBarController
         +-> UITableViewController
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-20 22:54:45

看起来UITabBarController是问题所在,我应该已经知道了,因为这里甚至提到了它(如何将TabBarController与导航控制器相结合?),它在文档中是虽然不太显眼

使用选项卡条控制器的应用程序也可以在一个或多个选项卡中使用导航控制器。在同一个用户界面中组合这两种类型的视图控制器时,选项卡条控制器总是充当导航控制器的包装器。

答案是,在我看来,视图层次结构需要改变,这样就没有UITabBarController了(因为使用它将要求它成为根控制器,这将迫使应用程序进行彻底的重新设计)。看起来最可行的替代方案是UITabBarController

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20104035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档