ios swift uinavigationbar uisearchbar ios11

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];