我有一个UISearchDisplayController
设置 UITableViewController
它嵌套在 UINavigationController
内。当选择一个单元格时,UITableView's
didSelectRowAtIndexPath
方法被触发,它将新 View 推送到父导航 Controller 。这个新 View 应该在入口处隐藏导航栏。
[[self navigationController] setNavigationBarHidden:YES animated:NO];
我在 didSelectRowAtIndexPath
中使用了这一行隐藏导航栏的方法。当不使用搜索 Controller 选择一行时,此功能可以正常工作,但在选择搜索结果时会被覆盖。看来UISearchDisplayController
在选择行后的某个时间将其置于右侧取消隐藏导航栏。
如果我移动setNavigationBarHidden
调用目标 View 的viewWillAppear
方法、结果相似。我可以通过将 hide 调用放入 viewDidAppear
来使其工作。 ,但这会产生非常的过渡效果,让人感觉跳跃且不合时宜。我想让导航栏在新 View 滑到屏幕上之前就已经隐藏了。
有谁知道导航栏的取消隐藏发生在哪里,和/或我可以通过什么方式覆盖此行为?
最佳答案
这可能不是最优雅的解决方案,但我相信它完全符合您的要求。我遇到了类似的问题,我的解决方案是有一个隐藏导航栏的方法,在延迟 0 秒后调用该方法,如下所示。
调用的方法是:
-(void) hideNavBar {
if (self.navigationController.navigationBar.hidden == NO)
{
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
}
然后在 viewDidLoad 方法中,我有以下内容:
[self performSelector:@selector(hideNavBar) withObject:nil afterDelay:0.0];
这可以工作并立即删除导航栏。如果您想要动画或在延迟后将其删除,您可以修改延迟时间。我尝试了 [self hideNavBar] 但这根本不起作用,所以坚持我上面的内容。
希望这有帮助,如果有人有更优雅的解决方案,我很感兴趣!
关于iphone - 在选择 UISearchDisplayController 后保持 UINavigationController 的导航栏隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340399/