iphone - 在选择 UISearchDisplayController 后保持 UINavigationController 的导航栏隐藏

标签 iphone iphone-sdk-3.0 uisearchdisplaycontroller

我有一个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/

相关文章:

objective-c - 如何删除 MKMapView 上的所有注释

iphone:(音频)发布消息以杀死 mediaserverd

ios - UISearchBar 向下移动 20 像素

iphone - 创建一个 Drop Pin MKPointAnnotation 支持拖动,就像 map 应用程序中的 Drop Pin 一样

iphone - 使用 Facebook iOS SDK 检索生日

iphone - 为什么 Facebook iOS 应用程序收不到申请请求的通知?

iphone - 什么是 cocoa 工作室

iphone - 如何以编程方式关闭 UISearchDisplayController?

iphone - UISearchDisplayController 隐藏阴影

ios - 如何在 swift3 中播放 mp3 文件?