Como adicionar botões de escopo em um UISearchController incorporado no UINavigationController

Eu tenho um aplicativo que está apresentando um MKMapView incorporado em um UINavigationController. No UINavigationController, coloquei um UISearchController. Quando o usuário toca no UISearchController, ele exibe um UITableViewController. Funciona bem enquanto não estou adicionando o botão Escopo no UISearchController.

Aqui, a captura de tela do UISearchController no UINavigationController quando inicio o aplicativo.

Em seguida, quando toco no UISearchController, ele exibe o UITableViewController e o botão de escopo.

Aqui já podemos ver que há um problema com o botão de escopo porque eles não estão bem integrados no UISearchController (a cor deve ser translúcida)

Em seguida, quando toco no botão Cancelar para retornar ao Controlador principal de exibição, o UISearchController não está recuperando seu estilo original

possui uma borda cinza escura (que provavelmente vem do botão de escopo).

Veja como eu adiciono o UISearchController no modo de exibição principal

    func initSearchController() {
    let mySearchController = UIStoryboard.init(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("SearchControllerId") as! SearchController

    self.searchController = UISearchController(searchResultsController: mySearchController)

    mySearchController.theSearchController = self.searchController
    mySearchController.delegate = self

    // Configure the UISearchController
    self.searchController.searchResultsUpdater = self
    self.searchController.delegate = self

    self.searchController.searchBar.delegate = self
    self.searchController.searchBar.placeholder = "data.." 
    self.searchController.hidesNavigationBarDuringPresentation = false
    self.searchController.dimsBackgroundDuringPresentation = true

    self.navigationItem.titleView = searchController.searchBar

    self.definesPresentationContext = true


}

esse método é chamado no viewDidLoad () do meu Main ViewController.

Em seguida, quando o SearchController for exibido, adicionarei o botão de escopo com o seguinte código na minha subclasse TableViewController

    override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    // Mandatory to make sure the TableView is displayed when the search field is empty
    // when user touch it.
    view.hidden = false

    var rect = delegate.searchController.searchBar.superview?.frame
    rect?.size.height = 88

    self.delegate.searchController.searchBar.scopeButtonTitles = ["one", "two", "three"]
    self.delegate.searchController.searchBar.showsScopeBar = true
    self.delegate.searchController.searchBar.superview?.frame = rect!
}

e o código a seguir é executado quando a pesquisa é fechada

    override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated)


    var rect = delegate.searchController.searchBar.superview?.frame
    rect?.size.height = 44

    self.delegate.searchController.searchBar.superview?.frame = rect!
    self.delegate.searchController.searchBar.showsScopeBar = false
    self.delegate.searchController.searchBar.scopeButtonTitles = nil
}

Como você pode ver, tenho vários problemas com este código.

Os botões de escopo não são exibidos corretamente e não consigo adicioná-los com uma boa animaçãoQuando o usuário sai, os botões do escopo da pesquisa são removidos, mas isso afeta o plano de fundo do UISearchController

Você pode me dizer o que estou fazendo de errado e o que devo fazer para integrar corretamente o botão Scope no UISearchController? Encontrei exemplos, mas apenas quando o UISearchController não está incorporado no UINavigationController.

Obrigado pela ajuda!

Sébastien.

questionAnswers(1)

yourAnswerToTheQuestion