Ich habe eine, ViewController
die sich in einer befindet UINavigationcontroller
, aber die Navigationsleiste ist versteckt. Wenn ich die App unter iOS 7 ausführe, wird die Statusleiste oben in meiner Ansicht angezeigt. Gibt es eine Möglichkeit, dies zu vermeiden?
Ich möchte keinen betriebssystemspezifischen Code schreiben.
Ich habe versucht, Einstellungen View controller-based status bar appearance
vorzunehmen NO
, aber das Problem wurde dadurch nicht behoben.
Antworten:
Xcode 5 wurde
iOS 6/7 Deltas
speziell entwickelt, um dieses Problem zu beheben. Im Storyboard habe ich meine Ansichten um 20 Pixel nach unten verschoben, um unter iOS 7 richtig auszusehen. Um iOS 6-kompatibel zu machen, habe ichDelta y
auf -20 geändert .Da mein Drehbuch nicht auto-Layout verwenden, hatte um die Höhe der Ansichten richtig auf iOS 6 ich , um die Größe zu setzen ,
Delta height
wie auchDelta Y
.quelle
Wenn Sie einfach KEINE Statusleiste möchten, müssen Sie Ihre Liste mit diesen Daten aktualisieren: Fügen Sie dazu in der Liste die folgenden 2 Einstellungen hinzu:
In iOS 7 wird von Ihnen erwartet, dass Sie Ihre App mit einer überlagerten transparenten Statusleiste gestalten. Siehe zum Beispiel die neue iOS 7 Wetter-App.
quelle
Dies ist das Standardverhalten für
UIViewController
iOS 7. Die Ansicht wird im Vollbildmodus angezeigt. Dies bedeutet, dass die Statusleiste den oberen Bereich Ihrer Ansicht abdeckt.Wenn Sie eine
UIViewController
innerhalb von a habenUINavigationController
und die Navigationsleiste sichtbar ist, können Sie den folgenden Code in IhrerviewDidLoad
oder ein Hintergrundbild für die Navigationsleiste ausführen .Wenn Sie die Navigationsleiste ausgeblendet haben, müssen Sie alle UIView-Elemente anpassen, indem Sie 20 Punkte verschieben. Ich sehe keine andere Lösung. Die Verwendung des automatischen Layouts hilft ein wenig.
Hier ist der Beispielcode zum Erkennen der iOS-Version, wenn Sie Abwärtskompatibilität wünschen.
quelle
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
Einzige funktionierende Lösung, die ich selbst gemacht habe.
Hier ist meine UIViewController-Unterklasse https://github.com/comonitos/ios7_overlaping
1 Unterklasse von UIViewController
2 Unterklassifizieren Sie Ihren window.rootViewController aus dieser Klasse.
3 Voila!
4 Fügen Sie dies hinzu, um Ihre Statusleiste weiß zu machen. Direkt nach dem [self.window makeKeyAndVisible]; !!!
quelle
Schlüssel in Liste hinzufügen --- Aussehen der Controller-basierten Statusleiste anzeigen: NEIN
quelle
Gehen Sie folgendermaßen vor, um die Statusleiste in ios7 auszublenden:
In Xcode gehe zum
Resources
Ordner " " und öffne "(app name)-Info.plist file
".View controller based status bar appearance
Schlüssel " " und stellen Sie den Wert "NO
" ein.Status bar is initially hidden
Schlüssel " " und stellen Sie den Wert "YES
" ein.Wenn die Tasten nicht vorhanden sind, können Sie sie hinzufügen, indem Sie oben "
information property list
" auswählen und auf das Symbol + klickenquelle
Wenn Sie es vollständig verbergen und es einfach vermeiden möchten, damit umzugehen, funktioniert dies gut.
Referenz https://stackoverflow.com/a/18873777/1030449
quelle
Wenn Sie
xib
s verwenden, besteht eine sehr einfache Implementierung darin, alle Unteransichten in einer Containeransicht mit Größenänderungsflags zu kapseln (die Sie bereits für die Kompatibilität mit 3,5 "und 4" verwenden), sodass die Ansichtshierarchie ungefähr so aussiehtund dann in
viewDidLoad
, mach so etwas:Auf diese Weise müssen die Schreibfedern nicht für die iOS 7-Kompatibilität geändert werden. Wenn Sie einen Hintergrund haben, kann dieser draußen aufbewahrt werden
containerView
und den gesamten Bildschirm abdecken.quelle
Dies ist alles, was zum Entfernen der Statusleiste erforderlich ist.
quelle
Für die Navigationsleiste:
Diesen Code schreiben:
habe gerade den Trick für mich getan.
quelle
Vincents Antwort KantenForExtendedLayout hat bei mir funktioniert.
Diese Makros helfen bei der Bestimmung der Betriebssystemversion und erleichtern dies
Fügen Sie diese Makros zur Datei prefix.pch Ihres Projekts hinzu und können Sie überall darauf zugreifen
quelle
Ich habe meine Antwort auf einen anderen Beitrag mit der gleichen Frage wie dieser gepostet.
Im Apple iOS7-Übergangshandbuch finden Sie https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/AppearanceCustomization.html#//apple_ref/doc/uid/TP40013174-CH15-SW1
Speziell
automaticallyAdjustsScrollViewInsets=YES
undset self.edgesForExtendedLayout = UIRectEdgeNone
funktioniert für mich, wenn ich die Überlappung nicht will und ich eine habetableviewcontroller
.quelle
Wenn Sie möchten, dass "Autolayout verwenden" um jeden Preis aktiviert wird, geben Sie den folgenden Code in viewdidload ein.
quelle
Meine Statusleiste und Navigationsleiste überlappen sich nach der Rückkehr aus der Querformatansicht von YTPlayer. Hier ist meine Lösung, nachdem ich die Version von @comonitos ausprobiert habe, aber auf meinem iOS 8 nicht funktioniert habe
Rufen Sie diese Funktion einfach auf, wenn Sie die Position der Navigationsleiste festlegen möchten. Ich habe YTPlayerViewDelegate's aufgerufen
playerView:didChangeToState:
quelle