web-dev-qa-db-fra.com

Comment masquer initialement la barre de recherche dans le contrôleur de navigation sur iOS 13?

Dans iOS 13, le comportement a changé de sorte que, par défaut, lorsque le contrôleur de navigation apparaît, la barre de recherche est visible (lorsque UISearchController est affecté à un navigationItem.searchController). Certaines applications système apparaissent avec la barre de recherche cachée (vous devez balayer vers le bas pour qu'elle apparaisse), mais je ne vois aucune propriété spécifique qui permettrait cela. Comment y parvenir - peut-être existe-t-il une propriété ou une méthode pour le faire?

11
Ivan Ičin

Par expérimentation, j'ai découvert que si vous retardez l'attribution du contrôleur de recherche à l'élément de navigation jusqu'à viewWillLayoutSubviews ou viewDidLayoutSubviews, le contrôleur de recherche commence caché, comme vous le souhaitez. Cependant, si vous le faites sur iOS 12 ou une version antérieure, le contrôleur de recherche ne sera pas révélé lors du défilement vers le bas.

J'ai fini par faire ce qui suit avec une vérification de version en désordre, qui fonctionne pour moi:

override func viewDidLoad() {
    super.viewDidLoad()

    searchController = /* make search controller... */

    if #available(iOS 13, *) {
        // Attaching the search controller at this time on iOS 13 results in the
        // search bar being initially visible, so assign it later
    }
    else {
        navigationItem.searchController = searchController
    }
}

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()
    navigationItem.searchController = searchController
}

4
bunnyhero

Je trouve que cela fonctionne:

self.searchController.searchBar.hidden = YES;

Vous devrez dévoiler au moment opportun.

0
Michael Rourke

Swift 5.2 et iOS 13.3.1: -

Essayez comme ça. Ça fonctionne bien

        navigationItem.hidesSearchBarWhenScrolling = false
0
Dinesh Kumar

J'ai réussi à faire ce travail en définissant isTransculentfalse sur le navigationBar et en ayant les données initiales sur UITableView ou UICollectionView. Si vous avez initialement 0 cellule et déclenchez reloadData après un certain temps (peut-être un appel réseau), SearchBar est visible initialement. Ayez donc une cellule factice ou quelque chose de similaire au début et chargez les données plus tard, si c'est le cas pour vous.

navigationController?.navigationBar.isTranslucent = false
0
frkncngz