![](/img/trans.png)
[英]iOS 13 How to hide UISearchController searchBar in navigationBar
[英]iOS adding a UISearchController is unhiding the NavigationBar
当我使用 UISearchController 更新我的表格视图时,我遇到了这个奇怪的副作用(如果我从表格视图中选择了一些东西而不搜索错误不会自己表现出来)。 但是当我搜索时,选择一个单元格,然后popViewControllerAnimated:
由于某种原因导航栏不再隐藏。 我想认为这是 iOS 中的一个错误,而不是特定于我的代码。 但我想我会看看是否有人能发现我的代码中的错误,或者对我可能做错的事情有任何想法。 我添加了[self.navigationController setNavigationBarHidden:YES];
到我的rootView
viewWillAppear
,但在动画结束之前栏不会消失。
我的 TableView/UISearchController 代码:
@interface LBSelectUniversityView()<UISearchResultsUpdating, UISearchBarDelegate>
@property (strong, nonatomic) UISearchController *searchController;
@end
@implementation LBSelectUniversityView {
NSArray *schoolNames;
NSArray *searchResults;
}
- (void)viewDidLoad {
[super viewDidLoad];
schoolNames = [[LBUtilities sharedInstance] schoolNames];
searchResults = schoolNames;
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.searchController.searchBar.delegate = self;
self.tableView.tableHeaderView = self.searchController.searchBar;
self.definesPresentationContext = YES;
[self.searchController.searchBar sizeToFit];
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return searchResults.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
...
return cell;
}
- (void)filterContentForSearchText:(NSString*)searchText{
if ([searchText isEqualToString:@""]) return;
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
searchResults = [schoolNames filteredArrayUsingPredicate:resultPredicate];
}
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
NSString *searchString = searchController.searchBar.text;
[self filterContentForSearchText:searchString];
[self.tableView reloadData];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
...
[self.navigationController popViewControllerAnimated:YES];
}
@end
如果您设置searchController.hidesNavigationBarDuringPresentation = NO
问题会消失吗?
也许正在发生以下情况:
searchController.active
设置为YES
。 因此searchController
调用[... setNavigationBarHidden:YES]
因为UISearchController.hidesNavigationBarDuringPresentation = YES
默认情况下。popViewControllerAnimated:
被调用。searchController.active
设置为NO
,因此searchController
调用[... setNavigationBarHidden:NO]
。 这会导致显示导航栏。我认为一旦您的搜索结果回来,您正在重新加载您的主表而不是搜索表。 这是您应该如何在搜索结果表上加载数据。
self.searchController.searchResultsTableView reloadData];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.