2015-11-10 105 views
1

我的应用程序是iPad的风景,使用自动布局。UISearchBar消失取消

初始视图的表格视图只占用一半的屏幕(另一半是MapKit视图)。

包含该表格(和地图视图)的该视图控制器是该应用的根控制器的顶部视图控制器。

在视图加载时,我实例化UISearchController并将其搜索栏添加到表视图的标题视图中,标准过程也是如此。

如果我点击搜索栏并输入一些文字,结果会显示出来。如果我在这里取消搜索,没问题。

如果相反,我选择其中一个结果行,并推入下一个屏幕,并弹出,搜索栏消失。我可以再次调用恢复它:

self.tableView.headerView = self.searchController.searchBar

在viewDidAppear(),但只适用,直到我点击搜索栏中的“取消”按钮(在这一点,它会再次消失 - 右侧范围按钮合拢动画结束)。

我见过很多类似的问题,但没有介绍我确切的症状,并没有任何的解决方案(或其他任何我能想到的):

// In viewDidLoad(): 

self.definesPresentationContext = true 

self.searchController.definesPresentationContext = true 

self.extendedLayoutIncludesOpaqueBars = true 

self.navigationController?.extendedLayoutIncludesOpaqueBars = true 

self.navigationController?.navigationBar.translucent = true 

...好像在我的情况下工作。

最奇怪的部分是,我有搜索接口(在模态视图控制器呈现)其它类似的表视图,其中没有差别我能够相对于配置地点,和那些工作好吗...

我知道我必须失去了一些东西......

+0

我不确定,但是在制作自己的控制器时,我看到了类似的东西。尝试玩'presentationContext'。 –

+0

你的意思是'definesPresentationContex'?我试过'true'和'false'。即使在导航到下一个视图控制器(推继续)之后,False也会导致搜索栏保持在屏幕上。 –

+0

是的,你是对的。恰恰是我在我的控制器中看到的这个问题。你可以检查'navigationBar。半透明的价值从儿童控制器返回后?也许子控制器设置一个值'navigationBar.translucent'到'false'? –

回答

0

几个小时的努力一切后,我发现有问题的代码:

func searchBarTextDidEndEditing(searchBar: UISearchBar) 
{ 
    // Dismiss the keyboard 
    self.resultSearchController.resignFirstResponder() 

    // Reload of table data 
    self.resultSearchController.loadView() 
} 

评论这两条线出来后 - 或者更好,整个方法(因为我没有做任何事情) - 第p roblem将自己排除。

注:我的一个同事的实施该方法,同时尝试不同的东西,让搜索能够按预期工作,它在某种程度上被卡住......

1

我有类似的问题。有时,点击取消按钮时,搜索栏也会消失。我发现如果搜索栏再次重置为表格标题,这可能会导致搜索栏消失。因此,我有以下更新代码来解决问题。

func setupSearchController(_ ctr: UISearchController?) { 
    if let sc = car { // search bar is not nil 
    if #available(iOS 11.0, *) { 
     navigationItem.searchController = sc 
    } else { 
     // Fallback on earlier versions 
     if tableView.tableHeaderView == nil { 
     tableView.tableHeaderView = sc.searchBar 
     } 
    } 
    } else { 
    if #available(iOS 11.0, *) { 
     navigationItem.searchController = nil 
    } else { 
     // Fallback on earlier versions 
     tableView.tableHeaderView = nil 
    } 
    } 
} 

注意:对于iOS 11或更高版本,搜索栏设置为导航项目。