searchBar chevauché par vue en-tête de section

J'ai mis le searchBar à l'intérieur de la tableHeaderView. Tout fonctionne bien sur iphone 6 mais sur iPhone 5s je reçois ce résultat bizarre?

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") } 
  • Remarque: j'utilise un NSFetchedResultController pour récupérer datatables

entrez la description de l'image ici

Voici la solution. N'appelez pas sizeToFit () après avoir placé searchBar dans tableHeaderView mais appelez-le BEFORE. Qu'est-ce qui se passe derrière la scène … Je me request ..

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

Il semble que juste au-dessous de la ligne de code fonctionne … rien d'autre ne semble fonctionner maintenant.

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

chaque fois que votre table redimensionne ou modifie les contraintes, vous devez appeler au-dessus du code.

Essayez ceci cela peut fonctionner

resultSearchController.clipToBounds = true

Vous pouvez également essayer la même chose que

 searchControl.searchBar.clipToBounds = true 

Je pense que cela fonctionne pour votre code.