J'ai donc tout essayé en essayant de placer une barre de recherche dans la barre de navigation de Swift. Mais malheureusement, je ne l'ai pas encore fait fonctionner ...
Pour ceux d'entre vous qui ne savent pas de quoi je parle, j'essaie de faire quelque chose comme ça
Notez la barre de recherche dans la barre de navigation. Alors voici ce que j'utilise actuellement
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
Je l'ai fait apparaître dans ma viewDidLoad
, et ensuite, lorsque je télécharge l'application qui me est présentée, il suffit d'une barre de navigation vide .... :( Des idées?
Essaye ça
var leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar)
self.navigationItem.leftBarButtonItem = leftNavBarButton
Mettre à jour
Vous conservez une propriété paresseuse UISearchBar
lazy var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))
Dans viewDidLoad
searchBar.placeholder = "Your placeholder"
var leftNavBarButton = UIBarButtonItem(customView:searchBar)
self.navigationItem.leftBarButtonItem = leftNavBarButton
Si vous souhaitez utiliser le storyboard Faites simplement glisser votre barre de recherche en tant que sortie, puis remplacez la propriété lazy
// 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
Dans votre contrôleur de vue:
lazy var searchBar = UISearchBar(frame: CGRectZero)
override func viewDidLoad() {
super.viewDidLoad()
searchBar.placeholder = "Search"
navigationItem.titleView = searchBar
}
En procédant de cette manière, en paramétrant navigationItem.titleView, la barre de recherche est automatiquement centrée sur les appareils iPhone et iPad. Remarque: testé uniquement avec les versions v8.4 et v9.0
pour 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 ?? "")")
}
Définir SearchBar en tant que titleView, modifie la hauteur de navigationBar en 56. Pour résoudre ce problème, vous pouvez incorporer searchBar dans la vue et le définir en tant que 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
Pour Swift 4 et 5.
Incorporer votre contrôleur de vue dans un contrôleur de navigation
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;
ou vous pouvez l'affecter à leftBarButtonItem comme décrit dans cette réponse