1. ホーム
  2. ios

[解決済み] iOS 11でスクロールせずにナビゲーションバーに検索バーを表示させる

2023-05-15 01:39:02

質問

UISearchController を navigationItem.searchController プロパティにアタッチしています。これは問題なく動作する。iOS 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 を使うことは、私が望むことをしませんでした。それは、私が望むのはそれが表示されることだけなのに、検索バーをアクティブ(キャンセルボタンなどを表示)にしてしまうのです。