如何防止 UISearchController 显示导航栏?

How to prevent the UISearchController from showing the navigation bar?

我的用例有点奇怪。我正在使用自己的导航栏,所以我用

隐藏了默认导航栏
[self.navigationController setNavigationBarHidden:YES animated:NO];

viewWillAppear

一切正常,但如果我在主动搜索时打开键盘,然后返回到上一个 UIViewController,则本机导航栏会再次出现,最后我得到 2导航栏(我自己的和默认的)。

这就是我在 viewDidLoad 中设置 UISearchController 的方式:

- (void)viewDidLoad {
[super viewDidLoad];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.obscuresBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
[self.searchController.searchBar sizeToFit];
self.definesPresentationContext = YES;
self.searchController.hidesNavigationBarDuringPresentation = YES;
self.searchController.searchBar.searchBarStyle = UISearchBarStyleMinimal;
}

我已经尝试删除 self.definesPresentationContext = YES;(或将其设为 NO),但这会产生一个不同的问题,即当我返回到之前的 UIViewController 时,搜索栏保持打开状态最重要的是!直到我点击取消。我还尝试在 viewWillDissappear 上以编程方式调用取消按钮,但这也不起作用...

所以我 运行 别无选择,这就是我来这里的原因。

有什么想法吗?

使用非标准的导航栏可能不是最好的主意。 (我知道客户有时会很固执,但我们应该告诉他们,有时标准解决方案有很多优点,例如维护成本低,从而降低了他们的账单)。

话虽如此,作为最后的手段,我可​​能会建议您采用一种非常 "strong" 的方法。 您可以使用自定义 class 子 class UINavigationController,并且在此 class 中您可以像这样覆盖 setNavigationBarHidden 方法

- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated{
     [super setNavigationBarHidden:YES animated:NO];
}

方法。这应该使栏一直隐藏。 不过,我不太支持这种解决方案,但它可能适用于您的情况。