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.

4voto

werdsackjon Punkte 384

Ich möchte Stunners Antwort erweitern und ein if-Anweisung hinzufügen, um zu überprüfen, ob es sich um iOS-7 handelt, denn als ich es auf iOS 6 getestet habe, ist meine App abgestürzt.

Die Ergänzung wäre folgende:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

Also würde ich vorschlagen, diese Methode zu deiner Datei MyViewControler.m hinzuzufügen:

- (void) viewDidLayoutSubviews {
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;
        viewBounds.origin.y = topBarOffset * -1;
        self.view.bounds = viewBounds;
    }
}

3voto

Xavier John Punkte 6913

Ich habe ein Szenario, in dem ich den von Apple geschriebenen BannerViewController verwende, um meine Anzeigen anzuzeigen, und einen ScrollViewController, der im BannerViewController eingebettet ist.

Um zu verhindern, dass die Navigationsleiste meinen Inhalt verdeckt, musste ich zwei Änderungen vornehmen.

1) Ändern von BannerViewController.m

- (void)viewDidLoad
{
   [super viewDidLoad];
   float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue;
   if (systemVersion >= 7.0) {
       self.edgesForExtendedLayout = UIRectEdgeNone;
   }
}

2) Ändern meiner ScrollViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue;
    if (systemVersion >= 7.0) {
        self.edgesForExtendedLayout = UIRectEdgeBottom;
    }
}

Jetzt werden die Anzeigen korrekt am unteren Rand der Ansicht angezeigt, anstatt von der Navigationsleiste verdeckt zu werden, und der Inhalt oben wird nicht abgeschnitten.

2voto

Amit Shelgaonkar Punkte 487

Nur setzen Sie den folgenden Code in der Ansicht wird angezeigt.

 if ([[[UIDevice currentDevice] systemVersion] floatValue]<= 7) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}

2voto

Carmen Punkte 6006

Erstellen Sie eine Einschränkung für das Top-Layout wie folgt Bildbeschreibung hier eingeben

2voto

juliancadi Punkte 897

Swift 4.2 - Xcode 10.0 - iOS 12.0:

if #available(iOS 11.0, *) {} else {
  self.edgesForExtendedLayout = []
  self.navigationController?.view.backgroundColor = .white
}

Translated to German:

Swift 4.2 - Xcode 10.0 - iOS 12.0:

if #available(iOS 11.0, *) {} else {
  self.edgesForExtendedLayout = []
  self.navigationController?.view.backgroundColor = .white
}

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