如何防止 UISearchController 显示导航栏?
Posted
技术标签:
【中文标题】如何防止 UISearchController 显示导航栏?【英文标题】:How to prevent the UISearchController from showing the navigation bar? 【发布时间】:2018-07-13 21:59:11 【问题描述】:我的用例有点奇怪。我正在使用自己的导航栏,所以我用
隐藏了默认导航栏[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
上以编程方式调用“取消”按钮,但这也不起作用...
所以我的选择已经不多了,这就是我在这里的原因。
有什么想法吗?
【问题讨论】:
如果你使用自己的导航栏,为什么需要默认的? @trungduc 我不知道!这就是整个问题。 UISearchController 将其恢复为默认值... 是否需要使用 searchController 或者为什么不使用 UISearchBar 组件。 ? 【参考方案1】:使用非标准的导航栏可能不是最好的主意。 (我知道客户有时会很固执,但我们应该告诉他们,有时标准解决方案有很多优点,例如维护成本低,从而降低了他们的费用)。
话虽如此,作为最后的手段,我可能会建议您采用一种非常“强大”的方法。 您可以使用自定义类对 UINavigationController 进行子类化,并且在此类中您可以像这样覆盖 setNavigationBarHidden 方法
- (void)setNavigationBarHidden:(BOOL)hidden animated:(BOOL)animated
[super setNavigationBarHidden:YES animated:NO];
方法。这应该使酒吧一直隐藏。 不过,我不太支持这种解决方案,但它可能适用于你的情况。
【讨论】:
不敢相信我没有想到这一点。完美运行。谢谢!以上是关于如何防止 UISearchController 显示导航栏?的主要内容,如果未能解决你的问题,请参考以下文章
防止 UISearchController 在第一次击键/字符时显示 searchResultsViewController
防止 UISearchController 在 IOS8 中隐藏视图导航栏