2017-10-13 6 views
0

J'utilise un UITableViewController avec un UISearchBar. UITableViewController est intégré dans un UINavigationController. Lorsque la vue de la table est affichée, la barre de recherche est en haut comme prévu (sous la barre de navigation). La barre de navigation affiche un titre et une invite.IOS: UISearchBar couvrant partiellement UINavigationBar avec l'invite

Lorsque je clique sur la barre de recherche, elle est déplacée et masque le titre dans ma barre de navigation. L'invite est toujours visible. Lorsque je n'utilise pas d'invite, la barre de recherche est toujours au-dessous de la barre de navigation comme prévu après que je l'ai cliqué.

J'ai créé un projet très simple pour illustrer mon problème. Le projet a le fichier suivant pour un UITableViewController:

import UIKit 

class searchTVC: UITableViewController, UISearchControllerDelegate, UISearchResultsUpdating { 
    fileprivate let searchController = UISearchController(searchResultsController: nil) 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     title = "Title" 
     navigationItem.prompt = "prompt" 

     tableView.backgroundColor = UIColor.gray 

     // Add search bar 
     searchController.delegate = self 
     searchController.searchResultsUpdater = self 
     searchController.hidesNavigationBarDuringPresentation = false 
     searchController.dimsBackgroundDuringPresentation = false 
     searchController.searchBar.sizeToFit() 

     tableView.tableHeaderView = searchController.searchBar 

     // remove separators for empty table 
     tableView.tableFooterView = UIView() 
    } 

    func updateSearchResults(for searchController: UISearchController) { 
     // ignore 
    } 
} 

Dans le story-board il n'y a qu'un UITableViewController vide qui est intégré dans un UINavigationController. Le résultat est indiqué ci-dessous.

Si vous commentez la ligne qui définit l'invite le comportement est comme prévu.

Je récemment mis à jour mon code à Swift 4. Je ne me rappelle pas que j'ai vu ce comportement lors de l'utilisation Swift 3, mais je ne suis pas complètement sûr qu'il a été introduit avec Swift 4.

Est-ce que je manque quelque chose dans la code ou est-ce un bug?

Répondre

1

définissez ces paramètres dans viewDidLoad:

self.definesPresentationContext = true 
self.edgesForExtendedLayout = .bottom