IOS 11のUITableViewControllerのnavigationItem.searchController
プロパティにUISearchControllerをアタッチしています。これはうまく機能します。NiceiOS 11スタイルの検索バーを使用できます。
ただし、起動時に検索バーを表示したいです。デフォルトでは、ユーザーは検索バーを表示するためにテーブルビューを上にスクロールする必要があります。誰もこれがどのように可能であるか知っていますか?
左:起動後のデフォルトの状態。右:検索バーが表示される(上にスクロールする)。右のスクリーンショットのように、起動後に検索バーを表示したいと思います。
ナビゲーションアイテムのプロパティhidesSearchBarWhenScrolling
をfalseに設定することで、検索バーを表示できることがすでにわかりました。ただし、これにより、検索バーは常に下にスクロールしても表示されますが、これは私が望んでいるものではありません。
次の例では、最初にスクロールバーを表示し、スクロール時に非表示にすることができます。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = false
}
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if #available(iOS 11.0, *) {
navigationItem.hidesSearchBarWhenScrolling = true
}
}
isActive
を使用しても、私が望んだことはできませんでした。スクロールバーをアクティブにします(キャンセルボタンなどを表示します)。
SearchControllerをisActive
に追加した後、プロパティtrue
をnavigationItem
に設定できます。
ちょうどこのような:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
searchController.isActive = true
}
以下は、searchBarがファーストレスポンダーになるようにします。
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DispatchQueue.main.async {
self.searchController.searchBar.becomeFirstResponder()
}
}