iOS 7 NavBar zu weit oben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • iOS 7 NavBar zu weit oben

    Heute konnte ich endlich Mavericks installieren und dadurch auch endlich Xcode 5

    Eine iPad App hat jetzt ein seltsames Verhalten:
    Die NavBar geht jetzt bis ganz oben und verdeckt dadurch natürlich teilweise Batteriestatus, Uhrzeit, Verbindungsstatus usw.

    Also, es sind natürlich die left- und rightBarItems und der title die zu weit oben stehen.
    Wie bekomme ich die weiter runter?

    ich würde ja gerne screenshots anhängen, es gibt dafür aber keine buttons mehr (auch nicht nach "Vorschau" klicken)
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • der Vollständigkeit halber (und weil ich mich freue, dass die Forum-Buttons funktionieren 8) )

    So sieht das im Storyboard aus:
    [Blockierte Grafik: http://www.hape42.de/NavBar.png]

    und das macht dann Xcode5 bzw. IOS7 daraus. Unter IOS6 war noch alles im Lot
    [Blockierte Grafik: http://www.hape42.de/Navbar1.png]

    so ganz habe ich die Lösungshinweise noch nicht verstanden, aber das liegt sicher an mir...
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • Wie gesagt, das liegt daran, dass die Views in iOS7 standardgemäß schon unter der Statusbar beginnen.
    Je nachdem ob du nur iOS 7 oder auch ältere Versionen unterstützen willst, mag die geschickteste Lösung anders ausfallen.

    Bin grad am iPad und kann keine Romane schreiben, aber hier sieht man diverse Möglichkeiten und Begründungen:
    stackoverflow.com/questions/18…tus-bar-overlaps-the-view
  • Ich habe das Problem so gelöst, indem ich einen UIView eingefügt habe oben am Bildschirmrand mit einer Höhe von 20. Die NavigationBar ziehst du nun um 20 nach unten. Gleichzeitig machst du den View natürlich in der selben Farbe, wie die NavigationBar und schon ist das Problem gelöst. Sicherlich nicht so, wie sich das Apple vorstellt, aber kurz und schmerzlos.
  • endlich hatte ich mal Zeit, mir das genauer anzusehen.

    Es wirkt nur auf den ersten Blick kompliziert.

    Am einfachsten ist es, y von der NavBar mit 20 statt 0 zu starten

    alles andere ergibt sich dann quasi von selbst

    Klar, ist es sauberer mit einem NavController zu starten.

    Das werde ich dann in ner ruhigen Minute noch angehen :whistling:
    Ich habe auch keine Loesung, aber ich bewundere das Problem!
    _____________________________________________________


    Hape42
  • @Thalius, dann nimmt man die iOS6/7 Deltas.
    Das ist auch eine der Lösungen aus dem von mir aus Faulheit verlinkten StackOverFlow Thema.
    (Und sogar in hape42s Screenshot oben sieht man diese Einstellung ;))

    Ein NavigationController mag in dem Fall helfen, aber es ist ja nicht immer eine Navigationbar die unter die Statusbar rutscht.
    Das kann einem auch ohne eine solche Bar mit jedem Inhalt passieren wenn man die Spielregeln von iOS7 nicht beachtet.
  • Gab es dafür nicht den topLayoutGuide (siehe iOS7 UI Transition Guide)?
    The topLayoutGuide and bottomLayoutGuide properties indicate the location of the top or bottom bar edges in a view controller’s view. If bars should overlap the top or bottom of a view, you can use Interface Builder to position the view relative to the bar by creating constraints to the bottom of topLayoutGuide or to the top of bottomLayoutGuide. (If no bars should overlap the view, the bottom of topLayoutGuide is the same as the top of the view and the top of bottomLayoutGuide is the same as the bottom of the view.) Both properties are lazily created when requested.

    D.h. entweder nen NavController verwenden (der machts automatisch richtig) oder nen StoryBoard (dort wird der topLayoutGuide automatisch bei AutoLayout bereitgestellt) oder manuell:

    Quellcode

    1. @property (nonatomic, strong) NSLayoutConstraint *topLayoutGuideConstraint;
    2. - (void)viewDidLoad {
    3. [super viewDidLoad];
    4. if (!self.topLayoutGuideConstraint) {
    5. id topLayoutGuide = self.topLayoutGuide; // hier wird der topLayoutGuide erst instanziert
    6. self.topLayoutGuideConstraint = [NSLayoutConstraint constraintWithItem:topLayoutGuide attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:self.zuPositionierendeView attribute:NSLayoutAttributeTop multiplier:1.0 constant:0];
    7. [self.view addConstraint:self.topLayoutGuideConstraint];
    8. }
    9. }


    Viele Grüße,
    Thomas