web-dev-qa-db-fra.com

Apparence et comportement de iOS 13 UISearchBar

J'ai mon UISearchBar configuré comme suit:

searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false // Allow user to tap on results
searchController.searchBar.placeholder = "Search patients" // Placeholder
searchController.searchBar.barStyle = .blackOpaque
searchController.searchBar.tintColor = colors.text // Cancel button tint

navigationItem.searchController = searchController // Set the searchController
navigationItem.hidesSearchBarWhenScrolling = true // Auto-hide search when user scrolls

Voici à quoi cela ressemble sur iOS 12: iOS 12 appearance vs iOS 13: enter image description here Qu'est-ce qui a changé dans iOS 13? J'ai essayé de parcourir les différents barStyles, et aussi de définir .isTranslucent à false - aucun effet non plus. Le mode clair/sombre ne change rien non plus.

L'autre changement consiste à masquer la barre de recherche - sur iOS 12, si je faisais un peu défiler vers le haut, la barre de recherche se cacherait (peu importe si le tableau était rempli ou non). Avec iOS 13, une fois que la barre de recherche est apparue (c'est-à-dire que l'utilisateur a glissé vers le bas), elle ne peut plus être cachée. Quelqu'un connaît-il un correctif pour cela aussi?

19
user7987142

J'ai un problème similaire avec vous. Je ne sais pas pourquoi cela se produit actuellement sur iOS 13 et fonctionne correctement dans les anciennes versions. Mais j'ai trouvé la solution en ajoutant cette fonction à votre barre de recherche.

if #available(iOS 13.0, *) {
   searchBar.searchTextField.backgroundColor = UIColor.white
}

Aperçu après correction:

before fixingafter fixing

13
Avendi Sianipar

Que diriez-vous d'utiliser searchBarStyle comme default et de changer la couleur d'arrière-plan searchTextField?

if #available(iOS 13.0, *) {
    searchBar.searchBarStyle = .default
    searchBar.searchTextField.backgroundColor = UIColor.black.withAlphaComponent(0.1)
}
8
Tai Le

Pour une configuration globale comme dans AppDelegate:

if #available(iOS 13, *) {
    UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .anyColor
}
3
RyuX51

searchController.searchBar.searchTextField.backgroundColor = UIColor.black fait le travail comme solution de contournement. Le sélecteur est nouveau dans iOS 13.

J'ai quand même déposé un rapport sur l'assistant de rétroaction car je pense que c'est un comportement inattendu.

3
user7987142