You can put the UISearchBar in the UINavigationBar without using the UINavigationController without any problems, but you only need to make minor changes, you first need to define the @IBOutlet for the UINavigationItem inside your UINavigationBar , but its name must be different from the navigationItem property defined in the whole UIViewController class, see the following code:
class ViewController: UIViewController, UISearchControllerDelegate, UISearchResultsUpdating, UISearchBarDelegate { var searchController : UISearchController! @IBOutlet weak var navigationItemBar: UINavigationItem! override func viewDidLoad() { super.viewDidLoad() self.searchController = UISearchController(searchResultsController: nil) self.searchController.searchResultsUpdater = self self.searchController.delegate = self self.searchController.searchBar.delegate = self self.searchController.hidesNavigationBarDuringPresentation = false self.searchController.dimsBackgroundDuringPresentation = true self.navigationItemBar.titleView = searchController.searchBar self.definesPresentationContext = true } func updateSearchResultsForSearchController(searchController: UISearchController) { } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning()
And then you can see something like this in your simulator:

Hope this helps you.
source share