ios - updatesearchresults - uisearchresultsupdating swift 4




Mostrar barra de pesquisa na barra de navegação sem rolar no iOS 11 (2)

Eu estou anexando um UISearchController para a propriedade navigationItem.searchController de um UITableViewController no iOS 11. Isso funciona bem: eu posso usar a barra de pesquisa agradável estilo 11 iOS.

No entanto, gostaria de tornar a barra de pesquisa visível no lançamento. Por padrão, o usuário precisa rolar para cima na exibição de tabela para ver a barra de pesquisa. Alguém sabe como isso é possível?

Esquerda: situação padrão após o lançamento. Direita: barra de pesquisa tornada visível (rolando para cima). Gostaria de ter a barra de pesquisa visível após o lançamento, como na captura de tela à direita.

Eu já descobri que a barra de pesquisa pode se tornar visível definindo a propriedade hidesSearchBarWhenScrolling do meu item de navegação como false. No entanto, isso faz com que a barra de pesquisa esteja sempre visível - mesmo quando rolando para baixo -, o que não é o que eu quero.


A seguir, a barra de rolagem fica visível no início e permite que ela se esconda ao rolar:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = false
    }
}

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    if #available(iOS 11.0, *) {
        navigationItem.hidesSearchBarWhenScrolling = true
    }
}

Usar o isActive não fez o que eu queria, ele torna a barra de rolagem ativa (mostrando o botão cancelar, etc.), quando tudo que eu quero é que seja visível.


Os itens a seguir tornam o searchBar como primeiro atendedor:

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

        DispatchQueue.main.async {
            self.searchController.searchBar.becomeFirstResponder()
        }
    }