In iOS 11, if you set a UISearchBar to be titleView of the navigationItem. Then add / remove UIBarButtonItem to navigationItem.leftBarButtonItems. The UIBarButtonItem will overlap with the UISearchBar.
- New single view Xcode project
- Embed ViewController in UINavigationController in storyboard
Modify ViewController.swift like this
class ViewController: UIViewController { let button = UIBarButtonItem(barButtonSystemItem: .add, target: nil, action: nil) override func viewDidLoad() { super.viewDidLoad() let searchBar = UISearchBar() searchBar.searchBarStyle = .minimal navigationItem.titleView = searchBar } override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { super.traitCollectionDidChange(previousTraitCollection) if traitCollection.horizontalSizeClass == .regular { navigationItem.leftBarButtonItem = button } else { navigationItem.leftBarButtonItem = nil } } }
Environment: Xcode 9.2, iOS 11.2.2
My question is: is there a way for the UINavigationBar to layout items correctly or have I done something wrong here? Thanks!
