webentwicklung-frage-antwort-db.com.de

iOS 11 UISearchBar in UINavigationBar

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. 

 enter image description here

Das Festlegen der Hintergrundfarbe führt dazu:

navigationItem.searchController?.searchBar.backgroundColor = UIColor.white

 enter image description here

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")

 enter image description here

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.

 enter image description here

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)

17
Darko

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:

 enter image description here

 enter image description here


Mit abgerundeter Ecke:
Animation mit abgerundeten Ecken funktioniert ebenfalls gut.

 enter image description here

18
Krunal

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;
}
2
nkitku

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

 example used to change the background to cyan color

2
Maruta

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
            }
        }

 enter image description here

2
iOS_Mouse

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:

 enter image description here

 enter image description here

1
Krunal

Versuchen Sie diesen Code,

UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"];
txfSearchField.backgroundColor = [UIColor redColor];
0
AshokPolu