2017-06-10 45 views
0

我正在使用帶有UITableViewController的UISearchController。當我進行搜索時,我選擇表格中的一行以轉到詳細信息視圖,然後返回到表視圖,表格的第一行將隱藏在搜索欄後面。在搜索控制器處於活動狀態時出現表視圖時隱藏第一行

我可以將第一行滾回到視圖中,但當我放開滾動時,它會在搜索欄後面彈出。太令人沮喪了!

在viewDidLoad中我有:

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

卸下definesPresentationContext =真解決了問題,但我需要,爲了防止在搜索欄從顯示出來,如果用戶塞格斯到其他視圖控制器。

我花了幾個小時尋找解決方案並嘗試不同的方法來解決問題。

當表格視圖重新出現時,是否有任何方法來設置表格的第一行,使其低於搜索欄?

我試着在prepareForSegue中設置definitionsPresentationContext = true,但那不起作用。

+0

把你的表或集合視圖下使用的UIView動畫和佈局約束頂部的搜索控制器的高度。 – Loxx

回答

0

我找到了解決這個問題的方法。

  1. 不要設置definesPresentationContext =真

  2. 在準備(爲:發件人:),添加以下。這樣可以保持搜索活動狀態,但是可以防止搜索欄和鍵盤出現在被查看的視圖控制器上。

    searchController.searchBar.isHidden = true 
    searchController.searchBar.endEditing(true) 
    
  3. 在viewWillAppear中添加以下內容。當帶有搜索控制器的視圖控制器進入導航堆棧的頂部時,這會使搜索欄可見。表格的第一行正好位於搜索欄下方。

    searchController.searchBar.isHidden = false 
    
  4. 在willMove(toParentViewController :)中,添加以下內容。這將取消任何主動搜索,防止搜索欄出現在導航堆棧頂部的視圖控制器上。

    if parent == nil { 
        searchController.isActive = false 
    } 
    
相關問題