我在用搜索栏看风景。当搜索变得活跃时,导航栏应该被激活(例如,像-[navigationController setNavigationBarHidden:animated:]一样)。
我已经使用UISearchDisplayController实现了这一点,它主要是做正确的事情,只是它没有隐藏导航条。视图层次结构如下所示:
UIWindow
+-> IIViewDeckController
+->UINavigationController
+->UITableViewController我已经初始化了这样的东西:
- (void)viewDidLoad
{
UISearchBar *searchBar = [[UISearchBar alloc] init];
self.searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
self.tableView.tableHeaderView = searchBar;
}我还尝试使用不同的抽屉控制器来查看IIViewDeckController中是否存在问题,如下所示:
UIWindow
+-> MMDrawerController
+->UINavigationController
+->UITableViewController通常,UISearchDisplayController应该从-[UISearchDisplayController setActive:animated:]的某个地方调用-[UINavigationController setNavigationBarHidden:animated:]。我甚至尝试创建一个从UISearchDisplayController派生的类,重载-[UISearchDisplayController setActive:animated:]并手动隐藏导航栏,如下所示:
- (void)setActive:(BOOL)visible animated:(BOOL)animated
{
[self.searchContentsController.navigationController setNavigationBarHidden:visible animated:animated];
[super setActive:visible animated:animated];
}清晰性更新:这段代码实际上确实像预期的那样隐藏了导航条,但它没有清除位于搜索栏以北的视图,而我最后在状态栏上看到了另一个视图(这有点道理,因为在通过-[UISearchDisplayController setActive:animated:]进行调试时,我发现它在隐藏导航栏时使用了一些私有API来清除刷新控制器。我认为。
由于某种原因,导航栏并没有隐藏,我一直在努力找出原因。
是什么导致了这种行为?
更新#2
看起来我在层次结构中漏掉了一个视图,而且在某种程度上它似乎是罪魁祸首(仍然不确定到底是哪种方式)。下面是:
UIWindow
+-> MMDrawerController
+-> UINavigationController
+-> UITabBarController
+-> UITableViewController发布于 2013-11-20 22:54:45
看起来UITabBarController是问题所在,我应该已经知道了,因为这里甚至提到了它(如何将TabBarController与导航控制器相结合?),它在文档中是虽然不太显眼:
使用选项卡条控制器的应用程序也可以在一个或多个选项卡中使用导航控制器。在同一个用户界面中组合这两种类型的视图控制器时,选项卡条控制器总是充当导航控制器的包装器。
答案是,在我看来,视图层次结构需要改变,这样就没有UITabBarController了(因为使用它将要求它成为根控制器,这将迫使应用程序进行彻底的重新设计)。看起来最可行的替代方案是UITabBarController。
https://stackoverflow.com/questions/20104035
复制相似问题