搜索控制器中的搜索栏重叠状态栏

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 内容重叠

带导航栏的搜索控制器

让导航栏与iOS 7中的状态栏重叠

在 iOS 11 上,导航项中的搜索栏在导航弹出时折叠并卡在状态栏下

搜索处于活动状态并推送到下一个视图控制器时出现导航栏问题