搜索控制器中的搜索栏重叠状态栏
Posted
技术标签:
【中文标题】搜索控制器中的搜索栏重叠状态栏【英文标题】:Search bar overlapping status bar in search controller 【发布时间】:2017-11-27 03:45:51 【问题描述】:我以编程方式在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;
这里应该有更多的填充与状态栏。
当你取消搜索时,我会在这里看到一个糟糕的动画,那就是状态栏的高度。
【问题讨论】:
这个来自 WWDC 的视频讨论了如何在 ios 11 中适应搜索栏。也许你会发现它很有用! developer.apple.com/videos/play/fall2017/201 【参考方案1】:从您的屏幕截图看来,您正在使用 iOS 11,在此版本中,UISearchController
搜索栏添加到 UI 的方式发生了变化。在 iOS 11 上,导航项负责显示搜索,因此 UIKit 尚未更新以正确处理表格标题视图中显示的搜索栏。
在 iOS ≤10 上你应该继续使用
self.tableView.tableHeaderView = _searchController.searchBar;
但切换到
self.navigationItem.searchController = _searchController;
self.navigationItem.hidesSearchBarWhenScrolling = YES;
在 iOS 11 及更高版本上。
【讨论】:
我的代码与问题相同,并且仅在 iOS11.2.5 和 iPhone 6s 中面临相同的问题。与所有其他设备一起工作正常。当我单击搜索时出现此问题,键入内容并单击搜索结果中的一个项目 - > 重定向到下一个屏幕并返回到第一个屏幕。知道需要做什么吗? 最好在一个单独的问题中提出这个问题,提供有关问题和代码的所有详细信息。【参考方案2】:只是一个快速的附加警告,除非您指定不希望它隐藏 NavBar,否则 searchBar 可能仍会在
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;
【讨论】:
以上是关于搜索控制器中的搜索栏重叠状态栏的主要内容,如果未能解决你的问题,请参考以下文章
UISearchController 搜索栏在活动时与第一个单元格重叠
UISearchBar 在活动时与 UITableView 内容重叠