installieren - ios 9




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

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

  1. Schalten Sie einfach das ein und stellen Sie es auf das ein, das Sie bevorzugen:

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

Und das Ergebnis :

Ich habe kürzlich Xcode 5 DP heruntergeladen, um meine Apps in iOS 7 zu testen. Das erste, was ich bemerkt und bestätigt habe, ist, dass die Grenzen meiner Ansicht nicht immer angepasst werden, um die Statusleiste und die Navigationsleiste zu berücksichtigen.

In viewDidLayoutSubviews ich die Grenzen der Ansicht:

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

Dies führt dazu, dass mein Inhalt unter der Navigationsleiste und der Statusleiste angezeigt wird.

Ich weiß, dass ich die Höhe selbst berechnen kann, indem ich die Höhe des Hauptbildschirms erhalte, die Höhe der Statusleiste und die Höhe der Navigationsleiste subtrahiere, aber das scheint unnötige Zusatzarbeit zu sein.

Wie kann ich dieses Problem beheben?

Aktualisieren:

Ich habe eine Lösung für dieses spezielle Problem gefunden. Legen Sie die transluzente Eigenschaft der Navigationsleiste auf NO fest:

self.navigationController.navigationBar.translucent = NO;

Dadurch wird verhindert, dass die Ansicht unter der Navigationsleiste und der Statusleiste eingerahmt wird.

Ich habe jedoch keine Lösung gefunden, wenn die Navigationsleiste transparent sein soll. Zum Beispiel, wenn ich ein Foto im Vollbildmodus betrachte, möchte ich, dass die Navigationsleiste durchscheinend ist und die Ansicht darunter eingerahmt wird. Das funktioniert, aber wenn ich die Navigationsleiste ein- und ausgeblendet habe, habe ich noch merkwürdigere Ergebnisse erlebt. Die erste Unteransicht (ein UIScrollView) wird jedes Mal in seiner ursprünglichen Umgebung geändert.


Die einfachste Lösung besteht für mich darin, zwei Schlüssel in das Plist hinzuzufügen


Fügen Sie in Ihrer apps-plist-Datei eine Zeile hinzu, nennen Sie sie "View controller-based status bar appearance" und setzen Sie sie auf NO .


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

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

1) Ändern Sie BannerViewController.m

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

2) Ändern Sie meinen ScrollViewContoller

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

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


Ich hatte das gleiche Problem mit meiner App von iPads (armv7, armv7s, amr64) nur durch Vorlage eines anderen UIViewController und nach dem Ablehnen geht sie Nav bar unter Statusleiste ... Ich verbringe viel Zeit, um eine Lösung dafür zu finden. Ich benutze Storyboard und in InterfaceBuilder für UIViewController, was schrecklich macht ich Presentation von FullScreen -> Current Context einstellen und dieses Problem beheben. Es funktioniert in meiner App nur für iPads => iOS8.0 (testet mit iOS8.1) und für iPads mit iOS 7.1 funktioniert nicht !!


Ich möchte die Antwort von Stunner erweitern und eine if Anweisung hinzufügen, um zu überprüfen, ob es iOS-7 ist, denn wenn ich es auf iOS 6 getestet habe, stürzt meine App ab.

Der Zusatz würde hinzufügen:

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

Daher würde ich vorschlagen, diese Methode zu Ihrer MyViewControler.m Datei MyViewControler.m :

- (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;
    }
}

Machen Sie eine Beschränkung für Top Layout wie folgt


Man muss nicht berechnen, wie weit man alles runterschieben kann, dafür gibt es ein eingebautes Eigentum. Markieren Sie in Interface Builder den View-Controller, und navigieren Sie zum Attributinspektor. Hier sehen Sie einige Kontrollkästchen neben den Worten "Extend Edges". Wie Sie sehen können, ist im ersten Screenshot die Standardauswahl, dass der Inhalt unter den oberen und unteren Balken angezeigt wird, aber nicht unter den undurchsichtigen Balken, weshalb die Einstellung des Balkenstils auf nicht transparent für Sie funktioniert hat.

Wie Sie im ersten Screenshot sehen können, verbergen sich zwei UI-Elemente unterhalb der Navigationsleiste. (Ich habe Wireframes in IB aktiviert, um dies zu veranschaulichen.) Bei diesen Elementen, einem UIButton und einem UISegmentedControl, ist der Ursprung "y" auf Null gesetzt, und der Ansichtscontroller ist so eingestellt, dass Inhalt unterhalb des oberen Balkens zulässig ist.

Dieser zweite Screenshot zeigt, was passiert, wenn Sie das Kontrollkästchen "Under Top Bars" deaktivieren. Wie Sie sehen können, wurde die View-Controller-Ansicht entsprechend nach unten verschoben, damit sich ihr y-Ursprung genau unterhalb der Navigationsleiste befindet.

Dies kann auch programmgesteuert durch die Verwendung von -[UIViewController edgesForExtendedLayout] . Hier finden Sie eine Verknüpfung zur Klassenreferenz für edgeForExtendedLayout und für UIRectEdge

[self setEdgesForExtendedLayout:UIRectEdgeNone];

Schritte zum Ausblenden der Statusleiste in iOS 7:

1. Gehen Sie zu Ihrer Anwendung info.plist Datei.

2.Und Set, Ansicht Controller-basierte Statusleiste Darstellung: Boolean NO

Hoffe, ich habe das Problem der Statusleiste gelöst .....


Setzen Sie einfach den folgenden Code in der Anzeige erscheint.

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

Swift 3 / Swift 4 Lösung, die auch mit NIBs / XIB Dateien in iOS 10+ funktioniert:

override func viewDidLoad() {
    super.viewDidLoad()

    edgesForExtendedLayout = []
}

Wenn Sie möchten, dass die Ansicht die transparente Navigationsleiste hat (was nett ist), müssen Sie ein contentInset oder ähnliches einrichten.

Hier ist, wie ich es mache:

// Check if we are running on ios7
if([[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."][0] intValue] >= 7) {
      CGRect statusBarViewRect = [[UIApplication sharedApplication] statusBarFrame];
      float heightPadding = statusBarViewRect.size.height+self.navigationController.navigationBar.frame.size.height;

      myContentView.contentInset = UIEdgeInsetsMake(heightPadding, 0.0, 0.0, 0.0);
}

Schnell 3

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




ios7