如何在 UINavigationBar 中隐藏 UISearchController
How to hide UISearchController in UINavigationBar
我有一个导航栏,当屏幕首次显示时,导航栏上没有搜索栏。我触发并在导航栏中显示搜索栏,但我想知道如何隐藏搜索栏并再次显示导航栏标题。
我创建的搜索栏如下:
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.placeholder = nil;
[self.searchController.searchBar sizeToFit];
//self.tableView.tableHeaderView = self.searchController.searchBar;
self.sharedNavigationItem.titleView = _searchController.searchBar;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES
self.searchController.searchBar.delegate = self; // so we can monitor text changes + others
self.definesPresentationContext = YES;
_searchController.hidesNavigationBarDuringPresentation = NO;
我只想在这里隐藏搜索栏并显示带有标题的普通导航栏:
您可以尝试在 属性 下方添加。
hidesNavigationBarDuringPresentation。
供参考:
另一个参考:
- (void)viewDidLayoutSubviews {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
UISearchDisplayController hiding navigation bar
注:未测试
如果你想隐藏整个导航栏,如果你想使用自己的导航栏,你可以先隐藏导航控制器的导航栏。
[self.navigationController setNavigationBarHidden:YES];
//OR
[self.navigationController setNavigationBarHidden:YES animated:NO];
或者如果您已经为导航栏使用了自定义标题视图,您可以这样做
self.navigationItem.titleView.hidden = YES;
或者如果你想隐藏后退栏按钮项目,你可以这样做
self.navigationItem.hidesBackButton = TRUE;
或者如果您只想隐藏标题,您可以这样做
self.navigationItem.title = @"";
和
self.navigationController.navigationItem.titleView = nil ;
我遇到了同样的问题。以前的答案建议废弃整个 NavigationBar
,但这不是研究的行为。解决方案是在按下搜索按钮时添加 searchBar
...
@IBAction func didPressAddButton(_ sender: Any) {
if #available(iOS 11.0, *) {
// For iOS 11 and later, place the search bar in the navigation bar.
navigationItem.searchController = tagSearchController
navigationItem.hidesSearchBarWhenScrolling = true
} else {
// For iOS 10 and earlier, place the search controller's search bar in the table view's header.
tableView.tableHeaderView = tagSearchController.searchBar
}
tagSearchController.isActive = true
}
...并在调用 didDismissSearchController
时将其删除(UISearchControllerDelegate
方法)。
func didDismissSearchController(_ searchController: UISearchController) {
if #available(iOS 11.0, *) {
// For iOS 11 and later, place the search bar in the navigation bar.
navigationItem.searchController = nil
} else {
// For iOS 10 and earlier, place the search controller's search bar in the table view's header.
tableView.tableHeaderView = nil
}
}
注意:我的 searchController
是在 viewDidLoad()
中创建和配置的
我有一个导航栏,当屏幕首次显示时,导航栏上没有搜索栏。我触发并在导航栏中显示搜索栏,但我想知道如何隐藏搜索栏并再次显示导航栏标题。
我创建的搜索栏如下:
_searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.placeholder = nil;
[self.searchController.searchBar sizeToFit];
//self.tableView.tableHeaderView = self.searchController.searchBar;
self.sharedNavigationItem.titleView = _searchController.searchBar;
self.searchController.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO; // default is YES
self.searchController.searchBar.delegate = self; // so we can monitor text changes + others
self.definesPresentationContext = YES;
_searchController.hidesNavigationBarDuringPresentation = NO;
我只想在这里隐藏搜索栏并显示带有标题的普通导航栏:
您可以尝试在 属性 下方添加。
hidesNavigationBarDuringPresentation。
供参考:
另一个参考:
- (void)viewDidLayoutSubviews {
[self.navigationController setNavigationBarHidden:NO animated:NO];
}
UISearchDisplayController hiding navigation bar
注:未测试
如果你想隐藏整个导航栏,如果你想使用自己的导航栏,你可以先隐藏导航控制器的导航栏。
[self.navigationController setNavigationBarHidden:YES];
//OR
[self.navigationController setNavigationBarHidden:YES animated:NO];
或者如果您已经为导航栏使用了自定义标题视图,您可以这样做
self.navigationItem.titleView.hidden = YES;
或者如果你想隐藏后退栏按钮项目,你可以这样做
self.navigationItem.hidesBackButton = TRUE;
或者如果您只想隐藏标题,您可以这样做
self.navigationItem.title = @"";
和
self.navigationController.navigationItem.titleView = nil ;
我遇到了同样的问题。以前的答案建议废弃整个 NavigationBar
,但这不是研究的行为。解决方案是在按下搜索按钮时添加 searchBar
...
@IBAction func didPressAddButton(_ sender: Any) {
if #available(iOS 11.0, *) {
// For iOS 11 and later, place the search bar in the navigation bar.
navigationItem.searchController = tagSearchController
navigationItem.hidesSearchBarWhenScrolling = true
} else {
// For iOS 10 and earlier, place the search controller's search bar in the table view's header.
tableView.tableHeaderView = tagSearchController.searchBar
}
tagSearchController.isActive = true
}
...并在调用 didDismissSearchController
时将其删除(UISearchControllerDelegate
方法)。
func didDismissSearchController(_ searchController: UISearchController) {
if #available(iOS 11.0, *) {
// For iOS 11 and later, place the search bar in the navigation bar.
navigationItem.searchController = nil
} else {
// For iOS 10 and earlier, place the search controller's search bar in the table view's header.
tableView.tableHeaderView = nil
}
}
注意:我的 searchController
是在 viewDidLoad()