Search code examples
iosswiftios11

UISearchBarSearchField BackgroundView color


enter image description hereI am trying to change the background color of the search bar text field and i have searched and tried lots of solutions but those are not working.

So, please anyone can tell me the exact solution for that. How can we change the background color of the search bar text field?

/// used to prepare searchController inside navigation.
private func prepareNavigationSearchControllerSetup() {
    self.title = AppConstant.kContacts
    let search = UISearchController(searchResultsController: nil)
    search.searchResultsUpdater = self
    search.searchBar.cornerRadius = 10.0
    search.searchBar.textField?.backgroundColor = .red
    search.searchBar.textField?.tintColor = .yellow
    self.navigationItem.searchController = search
    self.navigationItem.hidesSearchBarWhenScrolling = false
}

extension UISearchBar {

    var textField: UITextField? {
        let subViews = subviews.flatMap { $0.subviews }
        return (subViews.filter { $0 is UITextField }).first as? UITextField
    }
}

Solution

  • You can try this

    UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).backgroundColor = .yellow
    UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .blue
    

    Output

    enter image description here

    Edit : Full Code

        var searchController = UISearchController()
        let resultsTableController = Storyboard.Home.instantiateViewController(withIdentifier: "GlobalTableVC") as! GlobalTableVC
        resultsTableController.tableView.delegate = self
        resultsTableController.tableView.dataSource = self
    
        resultsTableController.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "SearchCell")
    
        searchController = UISearchController(searchResultsController: resultsTableController)
        searchController.searchBar.placeholder = "Search"
        searchController.dimsBackgroundDuringPresentation = true
        searchController.searchBar.sizeToFit()
        searchController.hidesNavigationBarDuringPresentation = false
        searchController.searchBar.keyboardType = UIKeyboardType.alphabet
        searchController.searchBar.tintColor = UIColor.white
        searchController.searchBar.barTintColor = UIColor(hexString: "EB033B")
    
        UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).backgroundColor = .yellow
        UITextField.appearance(whenContainedInInstancesOf: [type(of: searchController.searchBar)]).tintColor = .blue
    
    
        searchController.searchBar.delegate = self
        searchController.delegate = self
        searchController.searchResultsUpdater = self
    
        present(searchController, animated: true, completion: nil)