2017-06-10 3 views
0

私はUITearchControllerをUITableViewControllerで使用しています。進行中の検索が実行されているときに、テーブルの行を選択して詳細ビューに移動した後、テーブルビューに戻ると、テーブルの最初の行が検索バーの後ろに隠れてしまいます。検索コントローラがアクティブな間にテーブルビューが表示されたときに最初の行が表示されない

最初の行をスクロールして表示に戻すことはできますが、スクロールを放棄すると検索バーの後ろにポップバックします。だからイライラする! viewDidLoadで

は私が持っている:

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

はdefinesPresentationContext = trueを削除しても問題は解決するが、私は、ユーザーが他のビューコントローラにsegues場合には現れてから、検索バーを阻止する必要があります。

解決策を探して問題を解決するさまざまな方法を試すのに何時間も費やしました。

テーブルの最初の行を設定して、テーブルビューが再表示されたときに検索バーの下に表示される方法はありますか?

prepareForSegueでdefinePresentationContext = trueを設定しようとしましたが、動作しませんでした。

+0

。 – 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 
    } 
    
UIViewのアニメーションやレイアウト制約を使用して、トップの検索コントローラの高さによってダウン表示あなたのテーブルまたはコレクションを押す
関連する問題