Tuesday, August 1, 2017

searchBar overlapped by section header view

Leave a Comment

I put the searchBar inside the tableHeaderView. Everything works fine on iphone 6 but on iphone 5s I get this weird result?

 override func viewDidLoad() {     super.viewDidLoad()     tableView.delegate = self     tableView.dataSource = self     tableView.sectionIndexColor = Constants.Colors.ThemeGreen     tableView.sectionIndexBackgroundColor = UIColor.clearColor()     tableView.sectionIndexTrackingBackgroundColor = UIColor.clearColor()     tableView.contentInset = UIEdgeInsetsMake(0, 0, CGFloat(Constants.Dimensions.TabBarHeight), 0)     resultSearchController = UISearchController(searchResultsController: nil)     resultSearchController.searchResultsUpdater = self     resultSearchController.dimsBackgroundDuringPresentation = false     resultSearchController.definesPresentationContext = true     tableView.tableHeaderView = resultSearchController.searchBar     resultSearchController.searchBar.sizeToFit()   //Fetch data for the first time     do{       try fetchedResultsController.performFetch()       listHeaderView?.count = "\(fetchedResultsController.fetchedObjects!.count)"     }catch{       print("Error - Couldn't fetch list")     } 
  • NOTE: I'm using a NSFetchedResultController to retrieve the data

enter image description here

4 Answers

Answers 1

Here is the solution. Don't call sizeToFit() AFTER putting the searchBar in tableHeaderView but call it BEFORE. What the hell is going on behind the scene... I wonder..

resultSearchController.searchBar.sizeToFit() //Important to call sizeToFit BEFORE adding it to tableHeaderView or you get layout issues tableView.tableHeaderView = resultSearchController.searchBar 

Answers 2

It seems only below line of code does work ... nothing else seems to work right now.

self.tableView.beginUpdates()        // self.tableView.setTableHeaderView(headerView: self.filterView!)         //self.tableView.reloadData()         self.tableView.layoutIfNeeded()         self.tableView.layoutSubviews()         self.tableView.endUpdates() 

everytime your table resize or change constraints you need to call above code.

Answers 3

@mihir mehta

You can also try the same as

searchControl.searchBar.clipToBounds = true 

I think it works for your code.

Answers 4

Try this it may work

resultSearchController.clipToBounds = true

You can also try the same as

searchControl.searchBar.clipToBounds = true 

I think it works for your code.

If You Enjoyed This, Take 5 Seconds To Share It

0 comments:

Post a Comment