2016-05-16 4 views
1

Mit einem enthaltenen (eingebetteten) UINavigationController, der hochgezogen werden kann, um den Bildschirm zu füllen, entdeckte ich einen seltsamen Bug. Gerade in dem Moment, in dem der Navigationscontroller den gesamten Bildschirm abdeckte, veränderte sich seine Hauptansicht und es entstand eine Lücke von etwa 20 Punkten zwischen dieser Ansicht und der Navigationsleiste.Lücke zwischen UINavigationBar und dem Inhalt des UINavigationControllers

Es appears, dass dies ein "beabsichtigtes" Verhalten in UINavigationController ist. Aber wie kommst du rum?

Antwort

1

Nach vielen Stunden des Versuchens, eine Lösung zu finden (und sogar zu lesen, dass es keine Möglichkeit gibt, dies zu umgehen), fand ich eine Lösung, die gut genug funktioniert.

In meiner UINavigationController Unterklasse habe ich die folgende Überschreibung:

override public func viewDidLayoutSubviews() { 

    super.viewDidLayoutSubviews(); 

    if self.view.frame.size.height == Screen.height { 
     for childVC in childViewControllers { 
      childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height); 
     } 
    } 
} 
+0

Screen.height ist unbekannt ... Verwendung des unaufgelösten Bezeichners. irgendeine neue Syntax? –

0

Ich denke, die 20 Pixel durch die UIStatusBar genommen wird. Wenn Sie eine XIB-Datei oder ein Storyboard mit Auto-Layout verwenden, können Sie die obere Einschränkung auf die obere Layout-Anleitung setzen, so dass die Differenz von 20 Pixeln korrekt gehandhabt wird.

enter image description here

0

Es ist ein etwas jetzt Unterschied. Vielleicht ändert sich eine Syntax, aber das hat es für mich getan! Ja!! Danke @Lukas Kalinski

override public func viewDidLayoutSubviews() { 

     super.viewDidLayoutSubviews(); 

     if self.view.frame.size.height == UIScreen.mainScreen().bounds.height { 
      for childVC in childViewControllers { 
       childVC.view.frame = CGRectMake(0, navigationBar.frame.size.height, UIScreen.mainScreen().bounds.width, UIScreen.mainScreen().bounds.height - navigationBar.frame.size.height); 
      } 
     } 
    } 
Verwandte Themen