UISearchController iOS 11 Customization UISearchController iOS 11 Customization ios ios

UISearchController iOS 11 Customization


I just found out how to set them: (with some help of Brandon and Krunal, thanks!)

The "Cancel" text:

searchController.searchBar.tintColor = .white

The search icon:

searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.search, state: .normal)

The clear icon:

searchController.searchBar.setImage(UIImage(named: "my_search_icon"), for: UISearchBarIcon.clear, state: .normal)

The search text:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).defaultTextAttributes = [NSAttributedStringKey.foregroundColor.rawValue: UIColor.white]

enter image description here

The placeholder:

UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).attributedPlaceholder = NSAttributedString(string: "placeholder", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white])

enter image description here

The white background:

if #available(iOS 11.0, *) {    let sc = UISearchController(searchResultsController: nil)    sc.delegate = self    let scb = sc.searchBar    scb.tintColor = UIColor.white    scb.barTintColor = UIColor.white    if let textfield = scb.value(forKey: "searchField") as? UITextField {        textfield.textColor = UIColor.blue        if let backgroundview = textfield.subviews.first {            // Background color            backgroundview.backgroundColor = UIColor.white            // Rounded corner            backgroundview.layer.cornerRadius = 10;            backgroundview.clipsToBounds = true;        }    }    if let navigationbar = self.navigationController?.navigationBar {        navigationbar.barTintColor = UIColor.blue    }    navigationItem.searchController = sc    navigationItem.hidesSearchBarWhenScrolling = false}

enter image description here

Taken from here.


To properly set the text typed into the search bar to white use (when using a dark field color):

searchController.searchBar.barStyle = .black

To set the textfield background color

if #available(iOS 11.0, *) {        if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {            if let backgroundview = textfield.subviews.first {                // Background color                backgroundview.backgroundColor = UIColor.white                // Rounded corner                backgroundview.layer.cornerRadius = 10;                backgroundview.clipsToBounds = true;            }        }    }

However using something like

textfield.textColor = UIColor.blue

in the above does not seem to work.


Try setting the search bar's bar style.

searchController.searchBar.barStyle = UIBarStyleBlack;

image 1