Also habe ich alles versucht, um eine Suchleiste in die Navigationsleiste von Swift zu bekommen. Aber leider habe ich es noch nicht zum Laufen gebracht ...
Für diejenigen von Ihnen, die nicht wissen, wovon ich rede, versuche ich so etwas zu tun
Beachten Sie die Suchleiste in der Navigationsleiste. Also hier ist was ich gerade benutze
self.searchDisplayController?.displaysSearchBarInNavigationBar = true
Ich habe das in meine viewDidLoad
gestellt, und wenn ich dann die App lade, wird mir nur eine leere Navigationsleiste angezeigt .... :( Irgendwelche Ideen?
Versuche dies
var leftNavBarButton = UIBarButtonItem(customView:Yoursearchbar)
self.navigationItem.leftBarButtonItem = leftNavBarButton
Update
Sie behalten eine faule UISearchBar-Eigenschaft
lazy var searchBar:UISearchBar = UISearchBar(frame: CGRectMake(0, 0, 200, 20))
In viewDidLoad
searchBar.placeholder = "Your placeholder"
var leftNavBarButton = UIBarButtonItem(customView:searchBar)
self.navigationItem.leftBarButtonItem = leftNavBarButton
Wenn Sie das Storyboard Verwenden möchten, ziehen Sie Ihre Suchleiste einfach als Outlet und ersetzen Sie dann die Lazy-Eigenschaft durch Ihre Outlet-Suchleiste
// 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
In Ihrem View Controller:
lazy var searchBar = UISearchBar(frame: CGRectZero)
override func viewDidLoad() {
super.viewDidLoad()
searchBar.placeholder = "Search"
navigationItem.titleView = searchBar
}
Auf diese Weise wird die Suchleiste durch Festlegen von navigationItem.titleView automatisch auf den iPhone- und iPad-Geräten zentriert. Hinweis: Nur mit v8.4 und v9.0 getestet
für 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 ?? "")")
}
Durch Festlegen von SearchBar als titleView wird die Höhe der Navigationsleiste auf 56 geändert. Um dies zu beheben, können Sie searchBar in die Ansicht einbetten und als titleView festlegen.
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
Für Swift 4 und 5.
Betten Sie Ihren View Controller in einen Navigationscontroller ein
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;
oder Sie können es als leftBarButtonItem zuweisen, wie in diese Antwort beschrieben