Ich bin UISearchBar
Teil der Navigationsleiste wie folgt:
let searchBar = UISearchBar()
//some more configuration to the search bar
.....
navigationItem.titleView = searchBar
Nach dem Update auf iOS 11
etwas Seltsames passierte die Suchleiste in meiner App. Am iOS 10
und vor hatte ich meine Navigationsleiste wie folgt aussehen:
Jetzt mit habe iOS 11
ich:
Wie Sie sehen, gibt es einen Unterschied in der Rundung der beiden Suchleisten, der mich nicht stört. Das Problem ist, dass die Suchleiste die Höhe der Navigationsleiste erhöht. Wenn ich also zu einem anderen Controller gehe, sieht es auch komisch aus:
Tatsächlich entspricht die Höhe der seltsamen schwarzen Linie plus der aktuellen Navigationsleiste der Höhe der im zweiten Bild gezeigten Navigationsleiste ...
Irgendwelche Ideen, wie man die schwarze Linie loswird und eine einheitliche Höhe der Navigationsleiste über alle Ansichts-Controller hinweg hat?
quelle
Antworten:
Ich habe in zwei Fällen unter NavigationBar mit SearchBar in iOS 11 eine schwarze Linie erhalten:
als ich einen anderen ViewController von ViewController mit UISearchBar schob
als ich ViewController mit UISearchBar mit "Recht auf Entlassung ziehen" entließ
Meine Lösung war: Hinzufügen dieses Codes zu meinem ViewController mit UISearchBar:
Swift 4 Update
quelle
Sie können der Suchleiste für iOS 11 eine Einschränkung der Höhe 44 hinzufügen.
// Schnell
// Ziel c
quelle
Ich glaube, in iOS 11 hat UISearchBar jetzt eine Höhe von 56, und UINavigationBar verwendet Autolayout, um seine Unteransichten anzupassen, wodurch die Höhe erhöht wird. Wenn Sie UISearchBar weiterhin als titleView wie vor iOS 11 verwenden möchten, habe ich herausgefunden, dass es am besten ist, UISearchBar in eine benutzerdefinierte Ansicht einzubetten, die Höhe dieser Ansicht auf 44 festzulegen und sie navigationItem.titleView zuzuweisen
quelle
Versuchen Sie diesen Code auf dem View Controller "ACKNOWLEDGMENTS" in viewDidLoad
quelle
extendedLayoutIncludesOpaqueBars
Immobilie macht.Danke euch allen! Ich habe endlich eine Lösung gefunden.
Hinzufügen des folgenden Codes zu ViewController mit UISearchBar.
viewDidLoad
viewWillDisappear
quelle
In Ziel-C
quelle
Das passiert mir auch, alles läuft gut in iOS 12.4 und wird in 13 oben komisch. Das Problem besteht darin, dass die Höhe der Navigationsleiste in iOS 13 nach dem Sprung von UIViewController, der searchBar implementiert, von 88 auf 100 erhöht wurde.
Versuchen Sie dies in Ihrem UIViewController, der searchBar implementiert.
Vorschau nach dem Fixieren:
Vorschau vor dem Reparieren:
quelle
BEARBEITEN: Die @ zgjie-Antwort ist eine bessere Lösung für dieses Problem: https://stackoverflow.com/a/46356265/1713123
Es scheint, dass dies passiert, weil in iOS 11 der Standardhöhenwert von SearchBar auf 56 geändert wurde, statt auf 44 in früheren iOS-Versionen.
Im Moment habe ich diese Problemumgehung angewendet und die Höhe der Suchleiste auf 44 zurückgesetzt:
Eine andere Lösung könnte die neue searchController-Eigenschaft für navigationItem in iOS 11 sein :
Auf diese Weise wird die Suchleiste unter dem Navigationstitel angezeigt.
quelle
CGRect().insetBy(dx:dy:)
undCGRect().offsetBy(dx:dy:)
in diesem Fall -searchController.searchBar.frame = searchController.searchBar.frame.insetBy(dx: 0, dy: -12)
Alle Lösungen haben bei mir nicht funktioniert. Bevor ich den View Controller drückte, tat ich Folgendes:
Und um die Suchleiste beim Zurückgehen präsent zu machen:
quelle
Ich konnte die Lösung, die navBar auf 44 zu halten, nicht verwenden. Also habe ich einen Tag gebraucht, aber schließlich habe ich eine Lösung gefunden, die die Balkenhöhe nicht ändert und den Knopf in der Mitte der Bar positioniert. Das Problem ist, dass die Schaltflächen in einer Stapelansicht platziert sind, die als horizontale Stapelansicht konfiguriert ist und sich daher nicht an die Höhenänderung anpasst.
Dies geschieht auf init:
on viewWillApear (oder jederzeit, nachdem die Ansicht dem Navigationsstapel hinzugefügt wurde)
Und subviewOfClass ist eine Kategorie in UIView:
quelle
Alles, was Sie tun müssen, ist, UISearchBar zu unterordnen und "intrinsicContentSize" zu überschreiben:
quelle
Ich konnte keinen Kommentar abgeben, wollte aber einige zusätzliche Probleme mitteilen, auf die ich gestoßen bin, während ich viele Stunden damit verbracht habe, diesem Problem auf den Grund zu gehen, selbst nachdem ich eine der anderen Lösungen verwendet habe.
Es scheint, dass Andrews Antwort die beste Lösung für mich war :
Zumindest in iOS 12.1 , wenn Ihr
UINavigationBar
:isTranslucent
zu setzenfalse
, erhält der View - Controller mit der Suchleiste erscheint nicht , dass es nach Ansicht des Layout angepasst zurück , wenn interaktiv (normal entlasse über Zurück - Taste erscheint auf der Arbeit) zu entlassen.setBackgroundImage(UIImage(), for: .default)
, funktioniert die Übergangsanimation nicht richtig und springt nach Abschluss an ihre Position zurück.Diese besonderen Eigenschaften wurden so eingestellt, dass die Navigationsleiste auf eine bestimmte Weise angezeigt wird. Daher muss ich einige Anpassungen vornehmen, um sie wieder herzustellen, oder mich mit dem seltsamen Verhalten abfinden. Ich werde versuchen, mich daran zu erinnern, das oben Gesagte zu aktualisieren, wenn ich auf etwas anderes stoße oder andere Lösungen oder Unterschiede in anderen Betriebssystemversionen finde.
quelle
In meinem Fall war eine größere UINavigationBar-Größe für mich kein Problem. Ich musste nur die Elemente der linken und rechten Leistenschaltfläche neu ausrichten. Das ist die Lösung, die ich mir ausgedacht habe:
Grundsätzlich suchen wir nach Stapelansichten, die Elemente von Balkenschaltflächen enthalten, und ändern dann die Werte für die oberen und unteren Einschränkungen. Ja, es ist ein Dirt-Hack und wird nicht empfohlen, ihn zu verwenden, wenn Sie Ihr Problem auf andere Weise beheben können.
quelle
quelle
Ich fand, dass die Lösung von Mai Mai die einzige ist, die wirklich brauchbar ist.
Es ist jedoch immer noch nicht perfekt:
Beim Drehen des Geräts wird die Größe der Suchleiste nicht richtig geändert und bleibt in der kleineren Dimension.
Ich habe eine Lösung dafür gefunden. Hier ist mein Code in Ziel C mit den entsprechenden kommentierten Teilen:
Jetzt gibt es noch einen Fall, den ich noch nicht herausgefunden habe. Gehen Sie zum Reproduzieren wie folgt vor:
- Im Hochformat starten
- Suchfeld aktivieren
- In Querformat drehen
- Fehler: Die Größe der Leiste wird nicht geändert
quelle
Ich habe dies behoben, indem ich die Einschränkung zu viewDidAppear auf dem Kartenansichts-Controller hinzugefügt habe, in den die Suchleiste eingebettet ist
quelle
Hallo zu den Menschen , die verwendet
UISearchController
und dann seine BefestigungUISearchBar
an dennavigationItem.titleView
. Ich habe verrückte 4-5 Stunden meines Tages damit verbracht, dies zu lösen. Das Befolgen des von iOS 11+ empfohlenen Ansatzes, der dassearchController
auf den Punkt bringt,navigation.searchController
ist nicht nur für meinen Fall richtig. Der Bildschirm mit diesem searchController / searchBar verfügt über einen benutzerdefinierten backButton.Ich habe dies in iOS 10, iOS 11 und 12 getestet. Auf verschiedenen Geräten. Ich musste einfach. Ich kann nicht nach Hause gehen, ohne diesen Dämon zu lösen. Dies ist das Perfekteste, was ich heute tun kann, angesichts meiner engen Frist.
Ich möchte nur diese harte Arbeit teilen, die ich geleistet habe. Es liegt an Ihnen, alles zu platzieren, wo immer Sie wollen (z. B. Variablen in Ihrem viewModel). Hier kommt's:
In meinem ersten Bildschirm (z. B. Startbildschirm, auf dem dieser Suchcontroller nicht vorhanden ist) habe ich diesen in meinem
viewDidLoad()
.In meinem zweiten Bildschirm, dem mit dem searchController, habe ich diesen in meinem
viewDidAppear
.überschreiben func viewDidAppear (_ animiert: Bool) {super.viewDidAppear (animiert)
und hier ist die Erklärung meines searchControllers:
Ich hoffe, das hilft irgendwann jemandem.
quelle
Ich habe verschiedene Dinge versucht, um die Größe wieder auf das Original 44 zu bringen, aber dann sieht die Suchleiste immer komisch aus und verhält sich auch so - als wäre sie zu weit gedehnt, y-versetzt und gleich.
Ich habe hier eine gute Lösung gefunden (über einen anderen Stackoverflow-Beitrag): https://github.com/DreamTravelingLight/searchBarDemo
Leiten Sie einfach Ihren Viewcontroller vom SearchViewController ab und fügen Sie die Klassen SearchViewController und WMSearchbar in Ihr Projekt ein. Arbeitete sofort für mich ohne hässliche wenn (iOS11) sonst ... Hässlichkeit.
quelle
In meinem Fall muss ich die Höhe des Textfelds um 36pt -> 28pt verringern.
Also habe ich versucht, die Höhe des Rahmens und der Ebene zu ändern. Aber die Wege haben nicht funktioniert.
Schließlich fand ich eine Lösung, die die Maske ist. Ich denke, es ist kein guter Weg, aber es funktioniert.
Sie können die Einfügungen ändern, wenn Sie den Rahmen von textField ändern möchten.
quelle