2015-11-10 153 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或更高版本,搜索欄設置爲導航項目。