搜索控制器中的搜索栏重叠状态栏
Search bar overlapping status bar in search controller
我在 UITableViewController
中以编程方式创建了一个 UISearchController
。它工作正常,但搜索栏无法正确显示状态栏。这是我的代码和一些屏幕截图。它还在取消搜索时制作了一个有趣的动画。
- (void)viewDidLoad
{
[super viewDidLoad];
_resultsTableViewController = [ResultsTableViewController new];
_searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsTableViewController];
_searchController.searchResultsUpdater = _resultsTableViewController;
_searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
self.tableView.tableHeaderView = _searchController.searchBar;
}
这里的状态栏应该有更多的填充。
当您取消搜索时,我会在此处看到一个糟糕的动画,即状态栏的高度。
从您的屏幕截图看来,您正在使用 iOS 11,在此版本中,UISearchController
搜索栏添加到 UI 的方式已更改。 iOS 11 是负责显示搜索的导航项,因此 UIKit 尚未更新以正确处理 table header 视图中显示的搜索栏。
在iOS ≤10 你应该继续使用
self.tableView.tableHeaderView = _searchController.searchBar;
但切换到
self.navigationItem.searchController = _searchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
在 iOS 11 及以后。
只是一个快速的附加警告,除非您指定不希望它隐藏 NavBar,否则 searchBar 可能仍会在版本 < iOS 11 上消失
例如
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = self.mySearchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
} else {
// Fallback on earlier versions
self.tableView.tableHeaderView = self.mySearchController.searchBar; // show the SearchBar in TV header
self.mySearchController.hidesNavigationBarDuringPresentation = NO;
}
我在 UITableViewController
中以编程方式创建了一个 UISearchController
。它工作正常,但搜索栏无法正确显示状态栏。这是我的代码和一些屏幕截图。它还在取消搜索时制作了一个有趣的动画。
- (void)viewDidLoad
{
[super viewDidLoad];
_resultsTableViewController = [ResultsTableViewController new];
_searchController = [[UISearchController alloc] initWithSearchResultsController:_resultsTableViewController];
_searchController.searchResultsUpdater = _resultsTableViewController;
_searchController.dimsBackgroundDuringPresentation = NO;
self.definesPresentationContext = YES;
self.tableView.tableHeaderView = _searchController.searchBar;
}
这里的状态栏应该有更多的填充。
当您取消搜索时,我会在此处看到一个糟糕的动画,即状态栏的高度。
从您的屏幕截图看来,您正在使用 iOS 11,在此版本中,UISearchController
搜索栏添加到 UI 的方式已更改。 iOS 11 是负责显示搜索的导航项,因此 UIKit 尚未更新以正确处理 table header 视图中显示的搜索栏。
在iOS ≤10 你应该继续使用
self.tableView.tableHeaderView = _searchController.searchBar;
但切换到
self.navigationItem.searchController = _searchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
在 iOS 11 及以后。
只是一个快速的附加警告,除非您指定不希望它隐藏 NavBar,否则 searchBar 可能仍会在版本 < iOS 11 上消失 例如
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = self.mySearchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
} else {
// Fallback on earlier versions
self.tableView.tableHeaderView = self.mySearchController.searchBar; // show the SearchBar in TV header
self.mySearchController.hidesNavigationBarDuringPresentation = NO;
}