web-dev-qa-db-ja.com

Swiftのナビゲーションバーで検索バーを取得します

だから私は、Swiftのナビゲーションバーに検索バーを追加しようとしてすべてを試しました。しかし、残念ながらまだ機能していません...

私が話していることを知らないあなたのために、私はこのようなことをしようとしています

enter image description here

ナビゲーションバーの検索バーに注意してください。だからここは私が現在使用しているものです

self.searchDisplayController?.displaysSearchBarInNavigationBar = true

それをviewDidLoadにポップし、表示されたアプリをロードすると、空のナビゲーションバーだけが表示されます。..:(アイデアはありますか?

49
user302975

これを試して

let leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar)
  self.navigationItem.leftBarButtonItem = leftNavBarButton

更新

怠zyなUISearchBarプロパティを保持します

lazy   var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))

ViewDidLoadで

searchBar.placeholder = "Your placeholder"
var leftNavBarButton = UIBarButtonItem(customView:searchBar)
self.navigationItem.leftBarButtonItem = leftNavBarButton

ストーリーボードを使用する場合は、検索バーをアウトレットとしてドラッグし、遅延プロパティをアウトレット検索バーに置き換えます

67
Leo
    // create the search bar programatically since you won't be
    // able to drag one onto the navigation bar
    searchBar = UISearchBar()
    searchBar.sizeToFit()

    // the UIViewController comes with a navigationItem property
    // this will automatically be initialized for you if when the
    // view controller is added to a navigation controller's stack
    // you just need to set the titleView to be the search bar
    navigationItem.titleView = searchBar
49
antonio081014

View Controllerで:

lazy var searchBar = UISearchBar(frame: CGRectZero)

override func viewDidLoad() {
    super.viewDidLoad()

    searchBar.placeholder = "Search"

    navigationItem.titleView = searchBar
}

このようにして、navigationItem.titleViewを設定することにより、検索バーはiPhoneおよびiPadデバイスの中央に自動的に配置されます。注:v8.4およびv9.0でのみテスト済み

Swift 3の場合

lazy var searchBar = UISearchBar(frame: CGRect.zero)
16
iAmcR
    let searchBar = UISearchBar()
    searchBar.sizeToFit()
    searchBar.placeholder = ""
    self.navigationController?.navigationBar.topItem?.titleView = searchBar
1
luhuiya
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {

    searchBar.endEditing(true)
    searchBar.text = nil
    print("## search btn clicked : \(searchBar.text ?? "")")
} 
0
Sami Yousif

SearchBarをtitleViewとして設定すると、navigationBarの高さが56に変更されます。これを修正するには、searchBarをビューに埋め込み、それをtitleViewとして設定します。

    var offset: CGFloat = 20

    // If VC is pushed, back button should be visible
    if navigationController?.navigationBar.backItem != nil {
        offset = 40
    }

    let customFrame = CGRect(x: 0, y: 0, width: view.frame.size.width - offset, height: 44.0)
    let searchBarContainer = UIView(frame: customFrame)
    searchBar = UISearchBar(frame: customFrame)
    searchBarContainer.addSubview(searchBar)
    navigationItem.titleView = searchBarContainer
0
Arijan

Swift 4および5の場合.

View ControllerをNavigation Controllerに埋め込む

let searchBar = UISearchBar()
self.navigationItem.titleView = seachBar
[Here is a screenshot.][1]
let cancelButton = UIBarButtonItem(barButtonSystemItem: .cancel, target: self, action: 
cancelButton.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 

searchBar.tintColor = #colorLiteral(red: 0.9994240403, green: 0.9855536819, blue: 0, alpha: 
self.navigationItem.rightBarButtonItem = cancelButton
0
Manas Sharma

IOS 11以降の場合

navigationItem.searchController = searchController

enter image description here

IOS 10以下の場合

navigationItem.titleView = searchController.searchBar;

enter image description here

または this answer で説明されているように、leftBarButtonItemとして割り当てることができます

0
Husam