web-dev-qa-db-ja.com

iOS 13のナビゲーションコントローラーで最初に検索バーを非表示にする方法

IOS 13では動作が変更され、ナビゲーションコントローラが表示されたときにデフォルトで検索バーが表示されるようになりました(UISearchControllernavigationItem.searchControllerに割り当てられている場合)。一部のシステムアプリは検索バーを非表示にして表示されます(表示するには下にスワイプする必要があります)が、これを可能にする特定のプロパティが表示されません。これを達成する方法-多分それを行ういくつかのプロパティまたはいくつかの方法がありますか?

11
Ivan Ičin

実験により、ナビゲーションアイテムへの検索コントローラーの割り当てをviewWillLayoutSubviewsまたはviewDidLayoutSubviewsまで遅らせると、検索コントローラーが必要に応じて非表示になることがわかりました。ただし、これをiOS 12以前で実行すると、下にスクロールしても検索コントローラーは表示されません。

私は、厄介なバージョンチェックで次のことをすることになりました、それは私のために働いています:

override func viewDidLoad() {
    super.viewDidLoad()

    searchController = /* make search controller... */

    if #available(iOS 13, *) {
        // Attaching the search controller at this time on iOS 13 results in the
        // search bar being initially visible, so assign it later
    }
    else {
        navigationItem.searchController = searchController
    }
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    navigationItem.searchController = searchController
}

4
bunnyhero

私はこれがうまくいくと思います:

self.searchController.searchBar.hidden = YES;

適切なタイミングで再表示する必要があります。

0
Michael Rourke

Swift 5.2およびiOS 13.3.1:-

このようにしてみてください。うまくいきます

        navigationItem.hidesSearchBarWhenScrolling = false
0
Dinesh Kumar

isTransculentfalsenavigationBarを設定し、UITableViewまたはUICollectionViewに初期データを設定することで、これをうまく機能させることができました。最初はセルが0で、しばらくして(おそらくネットワーク呼び出しで)reloadDataをトリガーすると、最初にSearchBarが表示されます。そのため、最初はダミーセルなどを用意し、後でデータをロードします。

navigationController?.navigationBar.isTranslucent = false
0
frkncngz