Je souhaite placer une barre de recherche dans la nouvelle barre de navigation avec les nouveaux titres iOS 11 grands titres. Cependant, la couleur de la barre de recherche est automatiquement appliquée par iOS et je ne peux pas la changer.
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
La barre de recherche est sur un fond bleu foncé, mais je veux juste le changer en blanc.
La définition de la couleur d'arrière-plan entraîne les éléments suivants:
navigationItem.searchController?.searchBar.backgroundColor = UIColor.white
J'ai aussi essayé setScopeBarButtonBackgroundImage
et setBackgroundImage
dans la barre de recherche, mais tout semble totalement bizarre.
De plus, lorsque je lance la recherche en appuyant sur dans la barre de recherche, il passe en mode avec le bouton d'annulation situé à droite. ("Abbrechen" en allemand)
Et la couleur du texte "Abbrechen" ne peut pas non plus être modifiée. (besoin aussi blanc)
Toute aide est appréciée.
Edit: comme demandé, voici le code pour le style de la barre de navigation:
self.navigationBar.tintColor = UIColor.myWhite
self.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarTitle()]
self.navigationBar.barTintColor = UIColor.myTint
if #available(iOS 11.0, *) {
self.navigationBar.prefersLargeTitles = true
self.navigationBar.largeTitleTextAttributes = [NSAttributedStringKey.foregroundColor : UIColor.myWhite, NSAttributedStringKey.font: UIFont.myNavigationBarLargeTitle()]
}
Résultat actuel: J'ai utilisé l’idée de Krunals pour définir la couleur de l’arrière-plan de la barre de recherche, mais les coins arrondis sont perdus. Après avoir redéfini les angles arrondis, l’animation de la barre de recherche semble interrompue.
Donc toujours pas de solution satisfaisante. Il semble que la barre de recherche, lorsqu'elle est intégrée à la barre de navigation dans iOS 11, ne puisse pas être personnalisée. En attendant, il me suffirait de changer la couleur du texte fictif, mais même cela ne semble pas possible. (J'ai essayé plusieurs approches de StackOverflow - cela ne fonctionne pas)
Maintenant c'est ce que tu veux ...
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
sc.delegate = self
let scb = sc.searchBar
scb.tintColor = UIColor.white
scb.barTintColor = UIColor.white
if let textfield = scb.value(forKey: "searchField") as? UITextField {
textfield.textColor = UIColor.blue
if let backgroundview = textfield.subviews.first {
// Background color
backgroundview.backgroundColor = UIColor.white
// Rounded corner
backgroundview.layer.cornerRadius = 10;
backgroundview.clipsToBounds = true;
}
}
if let navigationbar = self.navigationController?.navigationBar {
navigationbar.barTintColor = UIColor.blue
}
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
Résultat:
Avec coin arrondi:
L'animation avec coins arrondis fonctionne également très bien.
Objectif c
if (@available(iOS 11.0, *)) {
self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
self.searchController.searchResultsUpdater = self;
self.searchController.searchBar.delegate = self;
self.searchController.dimsBackgroundDuringPresentation = NO;
self.navigationItem.searchController=self.searchController;
self.navigationItem.hidesSearchBarWhenScrolling=NO;
self.searchController.searchBar.searchBarStyle = UISearchBarStyleProminent;
self.searchController.searchBar.showsBookmarkButton = NO;
self.searchController.searchBar.placeholder = @"Search";
self.searchController.searchBar.tintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1];
self.searchController.searchBar.barTintColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
UITextField *txfSearchField = [self.searchController.searchBar valueForKey:@"_searchField"];
txfSearchField.tintColor=[UIColor colorWithRed:21/255.0 green:157/255.0 blue:130/255.0 alpha:1];
txfSearchField.textColor=[UIColor colorWithRed:1 green:1 blue:1 alpha:1];
txfSearchField.backgroundColor=[UIColor whiteColor];
UIView *backgroundview= [[txfSearchField subviews]firstObject ];
backgroundview.backgroundColor=[UIColor whiteColor];
// Rounded corner
backgroundview.layer.cornerRadius = 8;
backgroundview.clipsToBounds = true;
}
J'ai changé le fond du champ de texte avec ce code dans AppDelegate.
Swift 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//background color of text field
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
}
C'est le résultat
C'est le code que j'ai utilisé pour rendre la barre de recherche blanche:
if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {
if let backgroundview = textfield.subviews.first {
backgroundview.backgroundColor = UIColor.init(white: 1, alpha: 1)
backgroundview.layer.cornerRadius = 10
backgroundview.clipsToBounds = true
}
}
Cela devrait fonctionner pour vous
func addSearchbar(){
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
let scb = sc.searchBar
scb.tintColor = UIColor.white
if let navigationbar = self.navigationController?.navigationBar {
//navigationbar.tintColor = UIColor.green
//navigationbar.backgroundColor = UIColor.yellow
navigationbar.barTintColor = UIColor.blue
}
navigationController?.navigationBar.tintColor = UIColor.green
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
}
Résultat:
Essayez ce code,
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];