iOS 11 UISearchBar en UINavigationBar
swift ios11 (6)
Ahora es lo que quieres ...
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
}
Resultado:
Con esquina redondeada:
La animación con esquinas redondeadas también funciona bien.
Quiero colocar una barra de búsqueda en la nueva barra de navegación con los nuevos títulos grandes de iOS 11. Sin embargo, el color de la barra de búsqueda se aplica automáticamente en iOS y no puedo cambiarlo.
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
La barra de búsqueda tiene un fondo azul profundo, pero solo quiero cambiarlo a blanco.
Configurando los resultados del color de fondo en esto:
navigationItem.searchController?.searchBar.backgroundColor = UIColor.white
También he probado setScopeBarButtonBackgroundImage
y setBackgroundImage
en la barra de búsqueda, pero todo parece totalmente extraño.
Además, cuando disparo la búsqueda tocando la barra de búsqueda, cambia a un modo con el botón de cancelar en el lado derecho. ("Abbrechen" en alemán)
Y el color del texto "Abbrechen" tampoco se puede cambiar. (lo necesito tambien blanco)
Cualquier ayuda es apreciada.
Edición: según lo solicitado, aquí el código para el estilo de la barra de navegación:
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()]
}
Resultado actual: He usado la idea de Krunals para establecer el color del fondo de la barra de búsqueda, pero luego se pierden las esquinas redondeadas. Después de volver a configurar las esquinas redondeadas, la animación de la barra de búsqueda parece estar rota.
Así que todavía no hay solución satisfactoria. Parece que la barra de búsqueda cuando está incrustada en la barra de navegación en iOS 11 no es posible personalizarla. Mientras tanto, sería suficiente para mí simplemente cambiar el color del texto del marcador de posición, pero incluso esto parece no ser posible. (He intentado múltiples enfoques desde StackOverflow - no funciona)
C objetivo
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;
}
Cambié el fondo del campo de texto con este código dentro de AppDelegate.
Swift 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//background color of text field
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
}
Este es el resultado
Este es el código que utilicé para hacer que la barra de búsqueda sea blanca:
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
}
}
Esto debería funcionar para usted
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
}
}
Resultado :
Prueba este código,
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];