Ich möchte eine Suchleiste in der neuen Navigationsleiste mit den neuen großen iOS 11-Titeln platzieren. Die Farbe der Suchleiste wird jedoch automatisch von iOS übernommen und kann nicht geändert werden.
if #available(iOS 11.0, *) {
let sc = UISearchController(searchResultsController: nil)
navigationItem.searchController = sc
navigationItem.hidesSearchBarWhenScrolling = false
}
Die Suchleiste ist dunkelblau, aber ich möchte sie nur in Weiß ändern.
Das Festlegen der Hintergrundfarbe führt dazu:
navigationItem.searchController?.searchBar.backgroundColor = UIColor.white
Ich habe auch setScopeBarButtonBackgroundImage
und setBackgroundImage
auf der Suchleiste ausprobiert, aber alles sieht total komisch aus.
Auch wenn ich die Suche durch Tippen auf die Suchleiste auslöse, wird mit der Abbrechen-Schaltfläche auf der rechten Seite ein Modus angezeigt. ("Abbrechen")
Auch die Textfarbe "Abbrechen" kann nicht geändert werden. (brauche es auch weiß)
Jede Hilfe wird geschätzt.
Bearbeiten: Wie gewünscht, hier der Code für das Styling der Navigationsleiste:
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()]
}
Aktuelles Ergebnis: Ich habe die Krunals-Idee verwendet, um die Farbe des Hintergrunds der Suchleiste festzulegen, dann gehen die abgerundeten Ecken verloren. Nach dem Zurücksetzen der abgerundeten Ecken scheint die Animation der Suchleiste unterbrochen zu sein.
Also noch keine befriedigende Lösung. Es scheint, dass die Suchleiste nicht in iOS 11 eingebettet werden kann, wenn sie in die Navigationsleiste eingebettet ist. Inzwischen reicht es aus, die Farbe des Platzhaltertextes einfach zu ändern, aber selbst das scheint nicht möglich zu sein. (Ich habe mehrere Ansätze von StackOverflow ausprobiert - funktioniert nicht)
Jetzt ist es was du willst ...
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
}
Ergebnis:
Mit abgerundeter Ecke:
Animation mit abgerundeten Ecken funktioniert ebenfalls gut.
Ziel 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;
}
Ich habe den Hintergrund des Textfelds mit diesem Code in AppDelegate geändert.
Swift 4
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
//background color of text field
UITextField.appearance(whenContainedInInstancesOf: [UISearchBar.self]).backgroundColor = .cyan
}
Das ist das Ergebnis
Dies ist der Code, den ich verwendet habe, um die Suchleiste weiß zu machen:
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
}
}
Das sollte für Sie funktionieren
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
}
}
Ergebnis:
Versuchen Sie diesen Code,
UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];