UISearchControllerの検索バーをプログラムで表示する

kcstricks

注1:この質問は、更新するテーブルビューの外にUISearchControllerの検索バーを追加することに関するものであり、テーブルビューのヘッダーとしてではありません。

注2:試行錯誤の結果、解決策が見つかりました。以下の私の答えをご覧ください

私はiOS開発に不慣れで、UISearchControllerクラスの操作に苦労しています。私はビューコントローラーを持っていますが、ビューコントローラーのビューでは、テーブルビューの上に検索バーを配置する予定です。検索バーをUISearchControllerにリンクさせたいのですが。Interface BuilderにはUISearchControllerが付属していないため、プログラムでコントローラーを追加しています。UISearchControllerをインスタンス化した後、プログラムで検索コントローラーの検索バーをビューに追加しようとしましたが、成功しませんでした。検索バーのフレームを設定して自動レイアウトの制約を設定しようとしましたが、どちらの方法も機能しませんでした(つまり、アプリを実行しても何も表示されません)。これが私が試した最新のコードです:

    let searchController = UISearchController(searchResultsController: nil)

    // Set the search bar's frame
    searchController.searchBar.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 50)

    // Constraint to pin the search bar to the top of the view
    let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: 0)
    searchController.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)

    self.view.addSubview(searchController.searchBar)

    self.view.addConstraint(topConstraint)

どんな助けでも大歓迎です!ありがとうございました!

編集:検索バーのフレームを設定するか、自動レイアウト制約を与えるかのいずれかを使用する(最初に試した両方の組み合わせではなく)最初は機能しているように見えますが、検索バーをタップした後、指摘されているように問題が発生しますドワイトによる。あなたが現在持っているものと比較するのに役立つ場合に備えて、これらのケースのコードを残しましたが、実用的な解決策については、以下の私の答えを参照してください。

自動レイアウト制約の使用:

    let searchController = UISearchController(searchResultsController: nil)

    let topConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Top, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Top, multiplier: 1, constant: (statusBarHeight + navigationBarHeight!))
    let leftConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Left, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Left, multiplier: 1, constant: 0)
    let rightConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Right, relatedBy: NSLayoutRelation.Equal, toItem: self.view, attribute: NSLayoutAttribute.Right, multiplier: 1, constant: 0)
    let heightConstraint = NSLayoutConstraint(item: searchController.searchBar, attribute: NSLayoutAttribute.Height, relatedBy: NSLayoutRelation.Equal, toItem: nil, attribute: NSLayoutAttribute.NotAnAttribute, multiplier: 1, constant: 44)
    searchController.searchBar.setTranslatesAutoresizingMaskIntoConstraints(false)

    searchController.searchBar.addConstraint(heightConstraint)

    self.view.addSubview(searchController.searchBar)

    self.view.addConstraints([topConstraint, leftConstraint, rightConstraint])

ビューコントローラがナビゲーションコントローラに埋め込まれているため、topConstraint定数をステータスバーの高さとナビゲーションバーの高さに設定しました。

フレームの調整:

    let searchController = UISearchController(searchResultsController: nil)

    searchController.searchBar.frame = CGRect(x: 0, y: (statusBarHeight + navigationBarHeight!), width: self.view.frame.size.width, height: 44)

    self.view.addSubview(searchController.searchBar)
kcstricks

さらに試行錯誤した結果、次のような解決策があります。

  1. Main.storyboardを開き、高さ44(UISearchBarのデフォルトの高さ)のUIViewとUITableViewをビューコントローラーに追加します。自動レイアウト制約を設定して、UIViewが両側と上部レイアウトガイドに固定され(上部レイアウトガイドを使用すると、ビューコントローラーがナビゲーションコントローラーに埋め込まれているかどうかに関係なく機能するようになります)、テーブルビューがに固定されます。両側、下部のレイアウトガイド、およびその上部がUIViewの下部に固定されています。
  2. UIViewとUITableViewをViewController.swiftのIBOutletsとして接続します。私のプロジェクトでは、それらをtopViewおよびtableViewと呼びました。
  3. ViewController.swiftの上部で検索コントローラーを宣言します。 var searchController: UISearchController!
  4. 次に、viewDidLoad()で、次のものが必要になります。

    // Initialize and set up the search controller
    self.searchController = UISearchController(searchResultsController: nil)
    self.searchController.searchResultsUpdater = self
    self.searchController.dimsBackgroundDuringPresentation = false // Optional
    self.searchController.searchBar.delegate = self
    
    // Add the search bar as a subview of the UIView you added above the table view
    self.topView.addSubview(self.searchController.searchBar)
    // Call sizeToFit() on the search bar so it fits nicely in the UIView
    self.searchController.searchBar.sizeToFit()
    // For some reason, the search bar will extend outside the view to the left after calling sizeToFit. This next line corrects this.
    self.searchController.searchBar.frame.size.width = self.view.frame.size.width
    

これはそれであるはずです!もちろん、ビューコントローラーをUITableViewDatasource、UITableViewDelegate、UISearchBarDelegate、UISearchControllerDelegate、UISearchResultsUpdatingにして、必要なすべてのデリゲートメソッドも処理する必要がありますが、検索バーに関しては、これでうまくいきました。何か問題があればコメントしてください。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

プログラムでUISearchControllerの検索クエリ文字列をリセットする

分類Dev

プログラムで検索バーをすばやく修正する方法

分類Dev

UISearchController:検索バーが空の場合でも結果を表示する

分類Dev

プログラムでホーム画面のカスタムランチャーの検索バーとしてグーグルを設定する

分類Dev

Ionic2-プログラムで検索バーの値を編集する方法

分類Dev

ajaxなしでプログラムでグーグルを検索する

分類Dev

コードネーム1-プログラムで検索バーの編集を開始します

分類Dev

文字列名でプログラムで演算子を検索する

分類Dev

jQueryDataTablesを使用してプログラムでテーブルを検索する

分類Dev

アナグラムである文字列のグループを検索する

分類Dev

Windows 10の検索フィールドにプログラムを表示するにはどうすればよいですか?

分類Dev

プログラムでXAMLを検索して置換する

分類Dev

グーグルで何かを検索し、最初の検索結果を出力として表示するようにc言語でプログラムすることは可能ですか?

分類Dev

AndroidでプログラムでBluetoothデバイスを検出し、リストビューに表示する方法

分類Dev

Windows 10のタスクバーとプログラム検索でEclipseを適切に動作させるにはどうすればよいですか?

分類Dev

プログラムで特定のPIDに対して開いているポートを検索する

分類Dev

キーワードを使用してプログラムでグーグル検索を実行する

分類Dev

プログラムで検索バーをナビゲーションバーに配置するにはどうすればよいですか?-スイフト

分類Dev

プログラムでカスタム検索を使用してPythonでGoogleを検索する

分類Dev

バイナリファイルを検索するJavaプログラム

分類Dev

SwiftUIでタブバーまたはタブビューの高さをプログラムで検出する

分類Dev

サーバーの再起動時にプログラムを自動的に起動しますか(Sphinx検索)?

分類Dev

グーグル検索で私のhexoブログを表示する方法

分類Dev

プログラムでiPhone6&6Plusの表示モードを検出する方法

分類Dev

プログラムで検索バーをUITableViewヘッダーに追加するにはどうすればよいですか?

分類Dev

ブラウザプロジェクトでユーザーのグーグル検索エンジンの結果を表示する方法

分類Dev

プログラムでpypiパッケージを検索する(理想的には関連性でソート)

分類Dev

UISearchControllerの検索バーのキャンセルボタンを非表示にする

分類Dev

WinFormを使用してOutlookで特定の連絡先をプログラムで検索する

Related 関連記事

  1. 1

    プログラムでUISearchControllerの検索クエリ文字列をリセットする

  2. 2

    プログラムで検索バーをすばやく修正する方法

  3. 3

    UISearchController:検索バーが空の場合でも結果を表示する

  4. 4

    プログラムでホーム画面のカスタムランチャーの検索バーとしてグーグルを設定する

  5. 5

    Ionic2-プログラムで検索バーの値を編集する方法

  6. 6

    ajaxなしでプログラムでグーグルを検索する

  7. 7

    コードネーム1-プログラムで検索バーの編集を開始します

  8. 8

    文字列名でプログラムで演算子を検索する

  9. 9

    jQueryDataTablesを使用してプログラムでテーブルを検索する

  10. 10

    アナグラムである文字列のグループを検索する

  11. 11

    Windows 10の検索フィールドにプログラムを表示するにはどうすればよいですか?

  12. 12

    プログラムでXAMLを検索して置換する

  13. 13

    グーグルで何かを検索し、最初の検索結果を出力として表示するようにc言語でプログラムすることは可能ですか?

  14. 14

    AndroidでプログラムでBluetoothデバイスを検出し、リストビューに表示する方法

  15. 15

    Windows 10のタスクバーとプログラム検索でEclipseを適切に動作させるにはどうすればよいですか?

  16. 16

    プログラムで特定のPIDに対して開いているポートを検索する

  17. 17

    キーワードを使用してプログラムでグーグル検索を実行する

  18. 18

    プログラムで検索バーをナビゲーションバーに配置するにはどうすればよいですか?-スイフト

  19. 19

    プログラムでカスタム検索を使用してPythonでGoogleを検索する

  20. 20

    バイナリファイルを検索するJavaプログラム

  21. 21

    SwiftUIでタブバーまたはタブビューの高さをプログラムで検出する

  22. 22

    サーバーの再起動時にプログラムを自動的に起動しますか(Sphinx検索)?

  23. 23

    グーグル検索で私のhexoブログを表示する方法

  24. 24

    プログラムでiPhone6&6Plusの表示モードを検出する方法

  25. 25

    プログラムで検索バーをUITableViewヘッダーに追加するにはどうすればよいですか?

  26. 26

    ブラウザプロジェクトでユーザーのグーグル検索エンジンの結果を表示する方法

  27. 27

    プログラムでpypiパッケージを検索する(理想的には関連性でソート)

  28. 28

    UISearchControllerの検索バーのキャンセルボタンを非表示にする

  29. 29

    WinFormを使用してOutlookで特定の連絡先をプログラムで検索する

ホットタグ

アーカイブ