IOS 13では動作が変更され、ナビゲーションコントローラが表示されたときにデフォルトで検索バーが表示されるようになりました(UISearchController
がnavigationItem.searchController
に割り当てられている場合)。一部のシステムアプリは検索バーを非表示にして表示されます(表示するには下にスワイプする必要があります)が、これを可能にする特定のプロパティが表示されません。これを達成する方法-多分それを行ういくつかのプロパティまたはいくつかの方法がありますか?
実験により、ナビゲーションアイテムへの検索コントローラーの割り当てを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
}
私はこれがうまくいくと思います:
self.searchController.searchBar.hidden = YES;
適切なタイミングで再表示する必要があります。
Swift 5.2およびiOS 13.3.1:-
このようにしてみてください。うまくいきます
navigationItem.hidesSearchBarWhenScrolling = false
isTransculent
にfalse
navigationBar
を設定し、UITableView
またはUICollectionView
に初期データを設定することで、これをうまく機能させることができました。最初はセルが0で、しばらくして(おそらくネットワーク呼び出しで)reloadData
をトリガーすると、最初にSearchBarが表示されます。そのため、最初はダミーセルなどを用意し、後でデータをロードします。
navigationController?.navigationBar.isTranslucent = false