搜索控制器处于活动状态时出现表格视图时隐藏的第一行

时间:2017-06-10 22:20:56

标签: ios

我正在使用带有UITableViewController的UISearchController。当我正在进行搜索时,我在表格中选择一行以转到详细视图,然后返回到表格视图,该表格的第一行隐藏在搜索栏后面。

我可以将第一行滚动回视图,但是当我放开滚动时它会弹回到搜索栏后面。太令人沮丧了!

在viewDidLoad中我有:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.hidesNavigationBarDuringPresentation = false
searchController.dimsBackgroundDuringPresentation = false
definesPresentationContext = true
mainTable.tableHeaderView = searchController.searchBar

删除definesPresentationContext = true可以解决问题,但我需要这样做以防止在用户切换到其他视图控制器时显示搜索栏。

我花了几个小时寻找解决方案并尝试不同的方法来解决问题。

当表格视图重新出现时,有没有办法设置表格的第一行,使其位于搜索栏下方?

我尝试在prepareForSegue中设置definitionsPresentationContext = true,但这不起作用。

2 个答案:

答案 0 :(得分:0)

我找到了解决这个问题的方法。

  1. 不要设置definesPresentationContext = true

  2. 在准备(for:sender :)中,添加以下内容。这样可以使搜索保持活动状态,但可以防止搜索栏和键盘出现在被视频控制的视图控制器上。

    searchController.searchBar.isHidden = true
    searchController.searchBar.endEditing(true)
    
  3. 在viewWillAppear中,添加以下内容。当带有搜索控制器的视图控制器出现在导航堆栈的顶部时,这会使搜索栏可见。表格的第一行正确定位在搜索栏下方。

    searchController.searchBar.isHidden = false
    
  4. 在willMove(toParentViewController :)中,添加以下内容。这将取消任何活动搜索,从而阻止搜索栏出现在导航堆栈顶部的视图控制器上。

    if parent == nil {
        searchController.isActive = false
    }
    

答案 1 :(得分:0)

这对我有用:

self.extendedLayoutIncludesOpaqueBars = true