だから私は、Swiftのナビゲーションバーに検索バーを追加しようとしてすべてを試しました。しかし、残念ながらまだ機能していません...
私が話していることを知らないあなたのために、私はこのようなことをしようとしています
ナビゲーションバーの検索バーに注意してください。だからここは私が現在使用しているものです
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
それをviewDidLoad
にポップし、表示されたアプリをロードすると、空のナビゲーションバーだけが表示されます。..:(アイデアはありますか?
これを試して
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
ストーリーボードを使用する場合は、検索バーをアウトレットとしてドラッグし、遅延プロパティをアウトレット検索バーに置き換えます
// 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
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)
let searchBar = UISearchBar()
searchBar.sizeToFit()
searchBar.placeholder = ""
self.navigationController?.navigationBar.topItem?.titleView = searchBar
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.endEditing(true)
searchBar.text = nil
print("## search btn clicked : \(searchBar.text ?? "")")
}
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
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
navigationItem.searchController = searchController
navigationItem.titleView = searchController.searchBar;
または this answer で説明されているように、leftBarButtonItemとして割り当てることができます