UISearchBar überlappt die Statusleiste in iOS
Ich (genau wie jeder andere hier) bin mit den gleichen Status Bar überlappen Problem, dass alle anderen, mit einem kleinen twist, und das ist der Grund, warum ich die Eröffnung einer neuen Frage über.
Scheint es einen Mechanismus, mit dem der UISearchBar wissen, wo Sie positionieren Sie es selbst, die völlig aus dem Gleichgewicht geraten.
jaredsinclair Antwort hier (iOS 7 status bar wieder auf iOS 6 Standard-Stil in der iPhone-app?) , erklärt im detail, wie die Ingenieure von Apple dürfen wir vorstellen, die Logik unserer Anwendung, um zu mischen, so viel wie möglich mit der Umgebung des Benutzers.
Ging ich durch den Prozess sorgfältig untersuchen jedes UIViewController in meiner Anwendung, und die geringste änderung möglich.
In den meisten Fällen konnte ich das problem beheben, mithilfe des folgenden Codes die ich gefunden habe über mehrere SO Antworten
//Do any additional setup after loading the view.
if ([self respondsToSelector:@selector(edgesForExtendedLayout)]){
self.edgesForExtendedLayout = UIRectEdgeNone;
}
Diese jedoch nicht funktionieren würde, egal, was ich Tue, in einer bestimmten zu sehen, wo sich die UINavigationBar ausgeblendet.
Basiert auf der Lösung gefunden, auf einen SO war ich in der Lage, dieses Problem zu lösen, indem die folgende Logik, um diese Besondere UIViewController
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame];
viewFrame.origin.y = viewFrame.origin.y+statusBarFrame.size.height;
}
Dieser schiebt den UIViewController n Pixel nach unten "je" auf der Höhe der Statusleiste.
Den Effekt von dieser Karte hier
Das problem ist, dass wenn ich das Suche Feld den UISearchBar fügt von selbst eine 20px Polsterung auf der Oberseite, die offsets der gesamten Benutzeroberfläche.
Dies führt mich zu dem Schluss, dass die UISearchBar versucht, passen Sie selbst, und durch Zufall, es stellt sich genau die gleiche Menge wie der status bar die Höhe.
Wenn ich nicht hack die position, sobald ich in die Suche Feld, dann diese automatische Anpassung richtet die UISearchBar ordentlich unter der status bar.
Ich hoffe, ich habe detaillierte meiner Verwirrung, ich Frage mich, ob jemand irgendwelche Ideen hat, hin zu einer Lösung.
InformationsquelleAutor der Frage Fotis Paraskevopoulos | 2013-09-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die navigationBar sichtbar ist, tun Sie den folgenden in ViewDidLoad :
Wenn die navigationBar verborgen ist, tun Sie den folgenden in ViewDidLoad :
Stellen Sie alle UIView Elementen durch die Verlagerung der Ihnen 20pt
InformationsquelleAutor der Antwort Sunil Adhyaru
Gekämpft, um mit diesem Problem zu. Sie müssen dies in Ihre ViewControllers viewDidLoad-Methode.
Dieses Problem beheben sollte. Es ist angegeben in der iOS 7 Transition Guide.
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
InformationsquelleAutor der Antwort Ben Lime
UISearchBar hat eine delegate-Methode für das, was Sie wollen. Legen Sie ihn einfach, 20px von oben.
Leider funktioniert es nicht zusammen mit einem UISearchDisplayController.
InformationsquelleAutor der Antwort DanielFo
Bekam ich das exakt gleiche problem, und basierend auf Kommentaren wie @Ben und hier ich landete hinzufügen von den folgenden code, der mir geholfen hat:
alternativ kann dieser code auch funktioniert
InformationsquelleAutor der Antwort malkoty
Wenn jemand will, um dieses problem zu lösen über AutoLayout, anstelle der Zugabe eine Einschränkung
searchBar.top = self.view.top
hinzufügen einer Einschränkung der topLayoutGuide, etwa so:InformationsquelleAutor der Antwort rounak
Bin ich nicht wirklich klar, die etwas über die search bar anpassen Ihrer eigenen Höhe - meine Suche nach bars tun das nicht? Aber.
Können Sie eine Einschränkung auf die Top Layout Guide in IB, für die Suche bar. Dies wird dazu führen, dass stick auf der Unterseite der Statusleiste in ios 6 und ios 7. Wenn Sie dann entfernen Sie den code, wo Sie manuell anpassen, die Höhe der Statusleiste. Das sollte kümmern sich um Sie. Sie können sehen, ein Beispiel, wie Sie das hier tun: https://developer.apple.com/library/ios/qa/qa1797/_index.html
InformationsquelleAutor der Antwort BreadicalMD