Chris
Chris

Reputation: 3057

UISearchBar minimal style has transparent background

I've a UISearchBaradded to the top of an UITableView.

        // init search bar
    self.resultSearchController = ({
        let controller = UISearchController(searchResultsController: nil)
        controller.searchResultsUpdater = self
        controller.dimsBackgroundDuringPresentation = false
        controller.searchBar.sizeToFit()
        controller.searchBar.tintColor = Config.grayColor()
        controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal

        self.tableView.tableHeaderView = controller.searchBar

        // set content offset for table view in order
        // that the searchbar is hidden at the beginning
        self.tableView.contentOffset = CGPoint(x: 0, y: controller.searchBar.frame.size.height)

        return controller
    })()

This basically looks like expected:

enter image description here

But when I enter the search textfield and scroll down the table view it looks weird. The background of the search controller is transparent.

enter image description here

I've tried to set barTintColor and backgroundColor but it doesn't have any effect.

Upvotes: 11

Views: 2402

Answers (4)

belotserkovtsev
belotserkovtsev

Reputation: 361

the only solution that worked for me in Swift 5:

func viewDidLoad() {
  // make content disappear when it touches searchBar
  edgesForExtendedLayout = []

  // make searchBar color non-transparent
  searchBarController.searchBar.backgroundColor = .red
}

Upvotes: 0

user2304271
user2304271

Reputation: 1

You can use this code. This works for me:

UITextField.appearance(whenContainedInInstancesOf:  
      [UISearchBar.self]).backgroundColor = UIColor.RGB(red: 230, green: 230, blue: 230)

UISearchBar has a UITextField property and you just change that color like above.

Upvotes: 0

GuillermoMP
GuillermoMP

Reputation: 1764

I tested almost everything. The only way that worked for me is:

searchController.searchBar.searchBarStyle = .minimal
searchController.searchBar.setBackgroundImage(UIImage(color: .white), for: UIBarPosition(rawValue: 0)!, barMetrics:.default)

This works in both "normal" and "presented" forms. UIImage(color: .white) is just a way to create a 1x1 colored image that will be used to fill the background. You can find and implementation here

Upvotes: 2

Dan Moore
Dan Moore

Reputation: 73

set the searchBar's backgroundColor to white

searchBar.backgroundColor = UIColor.white

Upvotes: 2

Related Questions