【发布时间】:2020-02-28 12:29:16
【问题描述】:
我想在显示后用搜索栏替换导航栏。
或
如果导航栏总是超过我的主视图控制器的内容,我会很好。
我像这样设置搜索控制器:
_searchController = [[UISearchController alloc] initWithSearchResultsController:[[MySearchViewController alloc] init]];
_searchController.delegate = self;
_searchController.obscuresBackgroundDuringPresentation = TRUE;
_searchController.hidesNavigationBarDuringPresentation = TRUE;
_searchController.searchBar.placeholder = @"Search...";
_searchController.searchBar.delegate = self;
我像这样显示搜索控制器:
- (void)searchButtonTapped:(id)sender
{
self.navigationItem.searchController = _searchController;
[self.navigationController.view setNeedsLayout];
[self.navigationController.view layoutIfNeeded];
[self.navigationItem.searchController.searchBar becomeFirstResponder];
}
我像这样隐藏搜索控制器:
- (void)willDismissSearchController:(UISearchController*)searchController
{
self.navigationItem.searchController = nil;
[self.navigationController.view setNeedsLayout];
}
我知道searchController.hidesNavigationBarDuringPresentation 的属性与我想要的很接近,但正是如此。因为导航栏只有在我进入搜索栏后才会隐藏,但我希望它在我呈现搜索栏时已经隐藏。
只要我按下导航栏中的搜索图标按钮,它就会被搜索控制器替换,并且只有搜索栏在顶部可见。有谁知道如何做到这一点?
我已经试过了:
- 当我用
[self.navigationController setNavigationBarHidden:YES animated:NO];显示搜索控制器时隐藏导航栏 - 控制搜索栏高度限制并根据可见性进行更改
- 将搜索控制器设置为
navigationItem.titleView-> 这不是我想要的 - 根据可见性隐藏搜索控制器 -> 导航栏保持相同高度,仅隐藏搜索控制器
- 使用
self.definesPresentationContext,但这似乎与我需要的设置不同 - 查看了
self.navigationItem.hidesSearchBarWhenScrolling,但这并不适用,因为我不使用表格视图控制器
【问题讨论】:
标签: ios uinavigationbar uisearchbar uisearchcontroller