web-dev-qa-db-ja.com

iOS 11でスクロールせずにナビゲーションバーに検索バーを表示する

IOS 11のUITableViewControllerのnavigationItem.searchControllerプロパティにUISearchControllerをアタッチしています。これはうまく機能します。NiceiOS 11スタイルの検索バーを使用できます。

ただし、起動時に検索バーを表示したいです。デフォルトでは、ユーザーは検索バーを表示するためにテーブルビューを上にスクロールする必要があります。誰もこれがどのように可能であるか知っていますか?

enter image description hereenter image description here

左:起動後のデフォルトの状態。右:検索バーが表示される(上にスクロールする)。右のスクリーンショットのように、起動後に検索バーを表示したいと思います。

ナビゲーションアイテムのプロパティhidesSearchBarWhenScrollingをfalseに設定することで、検索バーを表示できることがすでにわかりました。ただし、これにより、検索バーは常に下にスクロールしても表示されますが、これは私が望んでいるものではありません。

61
Jonathan

次の例では、最初にスクロールバーを表示し、スクロール時に非表示にすることができます。

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を使用しても、私が望んだことはできませんでした。スクロールバーをアクティブにします(キャンセルボタンなどを表示します)。

148
Jordan Wood

SearchControllerをisActiveに追加した後、プロパティtruenavigationItemに設定できます。

ちょうどこのような:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    searchController.isActive = true
}
3
txaidw

以下は、searchBarがファーストレスポンダーになるようにします。

   override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)

        DispatchQueue.main.async {
            self.searchController.searchBar.becomeFirstResponder()
        }
    }
0
Ari Pratomo