it-swarm.com.de

iOS 11 UISearchBar Hintergrundfarbe

Ich verstehe, dass diese Frage auf SO viele, viele Male gestellt wurde. Wie Apple jedoch am besten kann, haben sie mit der Veröffentlichung von iOS 11 eine scheinbar unnötige Änderung an UISearchBarvorgenommen, insbesondere der Ansichtshierarchie.

Darüber hinaus ist das "Textfeld" einer Suchleiste in den Unteransichten der Suchleiste nicht mehr verfügbar, sodass alle der vorherigen Lösungen auf die Hintergrundfarbe des Textfelds oder eine Eigenschaft von "zugreifen" und diese ändern das Textfeld für diese Angelegenheit.

  • Weiß jemand, wie man eigentlich die Hintergrundfarbe einer Suchleiste in iOS 11 anpasst?

Zu Ihrer Information: Ich spreche speziell über die Farbe hinter dem Text ... der jetzt ab 11 standardmäßig weiß ist, es sei denn, Sie geben an, dass der Suchleistenstil minimal ist.

UPDATE 1:

Seitdem ich diese Frage gestellt habe, habe ich immer noch keine gültige oder wirklich irgendeine echte Lösung für dieses Problem gefunden. Das, was mir am nächsten zu kommen scheint, ist, tief in das Erscheinungsbild einzutauchen, zum Beispiel in Eigenschaften

[[UISearchBar class] appearanceWhenContainedInInstancesOfClasses:(nonnull NSArray<Class<UIAppearanceContainer>> *)]

des UISearchBarname__. Mit den gefundenen UITextFieldüber Methoden wie die folgenden herumspielen:

if ([view isKindOfClass:[UITextField class]]) {
    return (UITextField*)view;
}
UITextField *searchTextField;
for (UIView *subview in view.subviews) {
    searchTextField = [self searchViewForTextFieldBg:subview];
    if (searchTextField) {
        break;
    }
}
return searchTextField;

sie können mit dem Zeichnen einer neuen Hintergrundansicht beginnen, die sich hinter der Ansicht befindet. Die Probleme, die ich für zu mühsam befunden hatte, um sie weiter zu verfolgen, bestanden darin, die Ansicht mit den richtigen Rahmen/Grenzen zu zeichnen, um genau den ursprünglichen Hintergrund zu imitieren.

Hoffentlich kann jemand die aktuelle Lösung für dieses Problem finden. Nettes Fräulein Apple ...

8

Ich denke, Sie suchen das vielleicht, oder? Aber ich habe es in Swift :(

@IBOutlet weak var sbSearchBar: UISearchBar!

if let textfield = sbSearchBar.value(forKey: "searchField") as? UITextField {
    textfield.textColor = UIColor.blue
    textfield.backgroundColor = UIColor.yellow
}

Hier ist das Ergebnis:

enter image description here

4
Krunal

Dieser Code ändert die Hintergrundfarbe des Textfelds. 

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

4
Maruta
let searchBar = UISearchBar(frame: CGRect())
let searchField: UITextField? = searchBar.value(forKey: "searchField") as? UITextField
let searchBarBackground: UIView? = searchBar.value(forKey: "background") as? UIView
// searchBarBackground?.removeFromSuperview()

if searchField != nil {
    var frame = searchField?.frame
    frame?.size.height = 30
    searchField?.frame = frame!
    searchField?.backgroundColor = .yellow
}

searchBar.barTintColor = .red
searchBar.delegate = self
searchBar.backgroundColor = .green

Laufzeitsicht Hierarchie

Wenn wir Hintergrundfarben für UISearchBar mit dem obigen Code festlegen, werden die farbigen Unteransichten als Folgebilder angezeigt (klicken Sie auf die Links, um sie anzuzeigen) . 

backgroundColor für Superviews von UISearchBar-Subviews

Der Klassenname der grünen Ansicht ist UISearchBar im Object-Inspector.

Wenn wir also searchBar.backgroundColor = .green verwenden, setzen wir die Hintergrundfarbe von Superview grün. Daher setzt die UISearchBar-Instanzeigenschaft backgroundColor die Hintergrundfarbe des Superview.

Überblick über UISearchBar

barTintColor für UISearchBarBackground

Der Klassenname der roten Ansicht ist UISearchBarBackground im Object-Inspector.

Es gibt jedoch keine direkte Methode für den Zugriff auf die Ansicht. Wir können KVCsearchBar.value(forKey: "background") as? UIView versuchen, searchBarBackground zu erhalten.

Wenn wir searchBar.barTintColor = .red verwenden, setzen wir die backgroundColor-Ansicht von UISearchBarBackground auf Rot. Um zwei schwarze Ränder auf der Farbtonebene zu entfernen, müssen Sie den Hintergrund aus der Übersicht entfernen.

barTintColor von UISearchBar

searchField?.backgroundColor für UITextField

Der Klassenname der gelben Ansicht ist _UISearchBarSearchFieldBackgroundView (Unteransicht von UISearchBarTextField) im Objektinspektor.

Es gibt keine direkte Methode für den Zugriff auf searchField, genau wie searchBarBackground. Wir können auch KVCsearchField: UITextField? = searchBar.value(forKey: "searchField") as? UITextField verwenden, um searchField zu erhalten.

Wenn wir searchField?.backgroundColor = .yellow verwenden, setzen wir die backgroundColor von UITextField gelb. Wenn Sie also die Hintergrundfarbe des Textfelds einstellen möchten, müssen Sie zuerst mit KVC auf das Suchfeld zugreifen

UITextField von UISearchBar

2
user5533269

Swift 4-5

searchController.searchBar.barTintColor = .white

0
Juan Rangel