Mit iOS 11 hat Apple die UISearchBar neu gestaltet, indem die Ecken runder und die Höhe größer gemacht wurden. Das Hinzufügen einer UISearchBar zur Navigationsleiste ist ziemlich einfach, indem Sie sie einfach als Titelansicht des verwendeten Navigationsobjekts festlegen navigationItem.titleView = searchBar
.
In iOS 11 scheint es jedoch nicht mehr wie erwartet zu funktionieren. Schauen Sie sich die Bildschirme an, auf denen wir das gleiche Setup mit iOS 10 und iOS 11 vergleichen
Sie können deutlich sehen, dass die Suchleiste die Navigationsleiste vergrößert, die Balkentasten jedoch nicht richtig ausgerichtet sind. Auch die Suchleiste nutzt den verfügbaren Platz auf der linken Seite nicht mehr.
Wenn Sie die Suchleiste in eine Wrapper-Ansicht einfügen , um die Abbrechen-Schaltfläche auf dem iPad wie hier beschrieben zu erhalten, wird die Schaltfläche Abbrechen in der UISearchBar nicht angezeigt nicht mehr scheint ebenfalls nicht mehr zu funktionieren, da die Suchleiste dann überhaupt nicht sichtbar ist.
Wenn jemand ähnliche Probleme hat oder bereits weiß, wie dies behoben / verbessert werden kann, wäre ich sehr dankbar.
Dies wurde mit Xcode 9 Beta 4 erstellt. Möglicherweise wird dieses Problem durch zukünftige Versionen behoben.
AKTUALISIEREN:
Da dies nicht behoben wird, haben wir uns für die folgende Lösung entschieden. Wir haben der NavBar ein neues UIBarButtonItem hinzugefügt, das dann einen neuen ViewController enthält, in dem wir nur eine Suchleiste und nichts anderes in die NavBar einfügen, was zu funktionieren scheint. Die Verwendung der ausgewählten Antwort ist möglicherweise die beste Lösung, da Apple mit iOS 11 möchte, dass wir dieses neue Design verwenden, auch wenn es uns nicht das ursprünglich gewünschte Ergebnis liefert. Eine andere Möglichkeit, dies zu lösen, könnte eine benutzerdefinierte Suchleiste sein, dies ist jedoch ein anderes Thema.
quelle
Antworten:
In NavigationItem in iOS 11 gibt es eine neue searchController-Eigenschaft.
https://developer.apple.com/documentation/uikit/uinavigationitem/2897305-searchcontroller
Verwenden Sie so ...
In Objective-C sieht die if-Anweisung folgendermaßen aus:
Wenn Sie unter iOS 11 nichts festlegen
navigationItem.hidesSearchBarWhenScrolling = false
, wird die Suchleiste möglicherweise zunächst ausgeblendet, es sei denn, der Benutzer scrollt nach unten, um sie anzuzeigen. Wenn Sie den Wert auf "false" setzen, wird er unter dem Titel gestapelt angezeigt, ohne dass der Benutzer einen Bildlauf durchführen muss.quelle
Sie können die Höhe von UISearchBar in iOS 11 ändern, indem Sie eine Einschränkung für Höhe 44 hinzufügen:
if #available(iOS 11.0, *) { searchBar.heightAnchor.constraint(equalToConstant: 44.0).isActive = true }
quelle
Ich hatte das gleiche Problem und nach ein paar Tagen, in denen ich das Problem gegoogelt habe, fand ich diese Seite - https://translate.google.com/translate?hl=de&sl=zh-CN&u=http://www.jianshu.com/ p / 262f6e34a7d3 & prev = search .
Diese Seite führt zu diesem Git-Repo - https://github.com/DreamTravelingLight/searchBarDemo - Dieses Demo-Projekt zeigt, wie Sie mit titleView den alten Weg verwenden, um weiterhin eine SearchBar ohne Größenprobleme zu haben.
Die Schlüsselzeilen sind diese
Wenn Sie die UISearchBar in eine Ansicht einbetten und diese WrapView als titleView festlegen, hat die UISearchBar die von Ihnen festgelegte Größe und passt wie vorgesehen in die Navigationsleiste.
Danke, David
quelle
Wenn Sie das native System wirklich in iOS 11+ verwenden möchten
UISearchBar
(und das Erstellen Ihrer benutzerdefinierten Komponenten vermeiden möchten)navigationBar
, können Sie eine Containeransicht erstellen, damit SiesearchBar
die vollständige Kontrolle über den Frame haben. Diese Containeransicht ist die Übersicht der vonsearchBar
Ihnen übergebenen Container .Etwas wie:
Und dann:
quelle
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { coordinator.animate(alongsideTransition: { // here }... }
ist ausreichend.Ich denke, Sie müssen sich mit dem Festlegen der neuen UINavigationItem.searchController-Eigenschaft für Ihr UISearchController-Objekt befassen. Auf diese Weise erhalten Sie den neuen Effekt, wie er in Nachrichten angezeigt wird. Es sieht so aus, als ob das alte Verhalten einfach weg ist. Ich hoffe, ich liege falsch, aber die gesamte API wurde für 11 überarbeitet. Ich weiß, dass sie im Allgemeinen fehlerhaft ist, also werden wir bei neueren Betas und dem GM sehen, ob dies behoben wird. (Schreiben zum Zeitpunkt der Beta 6)
quelle
Das hat mir geholfen:
quelle
Ich habe es mit ausprobiert
searchController
undsearchBar
festgestellt, dasssearchBar
es meinen Anforderungen entspricht (Suche durch Klicken auf die Schaltfläche "Suchen").Auch ich hatte Schwierigkeiten, mit dem schwarzen Bildschirm umzugehen, wenn ich ihn benutze
searchControl
.quelle
Machen Sie eine Zusammenfassung in iOS 14+
Zuerst, um den Druck zu beheben, verursachen Sie zusätzliche Höhe:
Zweitens, um Pop auf Ursprungshöhe zu fixieren:
Alle oben genannten Codes in der Steuerung mit Suchleiste eingestellt.
quelle