444 Stimmen

Statusleiste und Navigationsleiste erscheinen über den Grenzen meiner Ansicht in iOS 7

Ich habe kürzlich Xcode 5 DP heruntergeladen, um meine Apps in iOS 7 zu testen. Das erste, was mir aufgefallen ist und bestätigt habe, ist, dass der Rahmen meiner Ansicht nicht immer für die Statusleiste und die Navigationsleiste angepasst wird.

In viewDidLayoutSubviews drucke ich den Rahmen der Ansicht:

{{0, 0}, {320, 568}}

Dadurch erscheint mein Inhalt unterhalb der Navigationsleiste und der Statusleiste.

Ich weiß, dass ich die Höhe selbst berücksichtigen könnte, indem ich die Höhe des Hauptbildschirms bekomme, die Höhe der Statusleiste und die Höhe der Navigationsleiste abziehe, aber das scheint wie unnötige zusätzliche Arbeit.

Wie kann ich dieses Problem beheben?

Update:

Ich habe eine Lösung für dieses spezifische Problem gefunden. Setze die Transluzenz-Eigenschaft der Navigationsleiste auf NEIN:

self.navigationController.navigationBar.translucent = NO;

Dadurch wird verhindert, dass die Ansicht unterhalb der Navigationsleiste und der Statusleiste gerahmt wird.

Ich habe jedoch keine Lösung für den Fall gefunden, wenn Sie möchten, dass die Navigationsleiste transluzent ist. Zum Beispiel, wenn Sie ein Foto im Vollbildmodus anzeigen, möchte ich die Navigationsleiste transluzent haben und die Ansicht darunter gerahmt haben. Das funktioniert, aber wenn ich die Anzeige der Navigationsleiste ein- und ausschalte, habe ich noch seltsamere Ergebnisse erlebt. Der erste Unterblick (ein UIScrollView) ändert jedes Mal seinen Ursprung.

9voto

Idan Punkte 9711

In Ihrer Apps-Info-Liste fügen Sie eine Zeile hinzu, nennen Sie sie "View-Controller-basierte Statusleistenanzeige" und setzen Sie sie auf NEIN.

9voto

Raj Pawan Gumdal Punkte 7300

edgesForExtendedLayout erledigt die Aufgabe für iOS 7. Wenn Sie die App jedoch mit dem iOS 7 SDK erstellen und auf iOS 6 bereitstellen, erscheint die Navigationsleiste durchscheinend und die Ansichten gehen darunter. Um dies sowohl für iOS 7 als auch für iOS 6 zu beheben, tun Sie dies:

self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // spezifisch für iOS 7

7voto

Riskov Punkte 834

Der einfachste Trick ist, die NIB-Datei zu öffnen und diese zwei einfachen Schritte auszuführen:

  1. Einfach umschalten und auf den bevorzugten Wert setzen:

Bildbeschreibung hier eingeben

  1. Wählen Sie die UIViews/UIImageViews/... aus, die Sie nach unten bewegen möchten. In meinem Fall wurde nur das Logo überlappt und ich habe den Delta-Wert auf +15 gesetzt (ODER -15, wenn Sie in Schritt 1 iOS 7 ausgewählt haben)

Bildbeschreibung hier eingeben

Und das Ergebnis:

Vorher Nachher

5voto

fatihyildizhan Punkte 7773

Schnelle Lösung:

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    self.edgesForExtendedLayout = UIRectEdge.None
}

4voto

Shahrukh Punkte 740

Swift 3

override func viewWillAppear(_ animated: Bool) {
    self.edgesForExtendedLayout = []
}

Swift 3

override func viewWillAppear(_ animated: Bool) {
    self.edgesForExtendedLayout = []
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X