2012-04-09 1 views
3

Ich habe ein Problem mit Top 20px hinter Statusleiste, insbesondere kann ich nichts dort setzen.iOS - Wie die oberen 20px in Storyboard mit transluzenten schwarzen Statusleiste zurückfordern

Bei der Erstellung der Benutzeroberfläche habe ich den Storyboard-Ansatz verwendet und den Statusleisten-Stil auf durchsichtiges Schwarz gesetzt. Aber wann ist das Layout in Xcode die Höhe meiner Ansichten auf 460px fixiert (ausgegraut).

Bitte helfen.

Haben Sie eine Antwort von einem Freund, wird seine Lösung als richtige Antwort markieren, sobald er es hier posten. Vorerst ist hier die Lösung:

  1. In Interface Builder die View-Controller wie will Vollbild und von Freiformgröße einstellen: http://cl.ly/0x1p1u3q3B1y3b3C3U2n
  2. Dann in der Größe der Ansicht Einstellungen seine Höhe 480px: http://cl.ly/1p1b0e060p1Y37393D08
  3. Stellen Sie sicher, Statusleiste Stil ist durchscheinend schwarz in der Info.plist: http://cl.ly/153Y391S1b0G3J3z3Y1O
  4. Erhalten zufriedenstellendes Ergebnis: http://cl.ly/0Q1M390i3A3h2F3u2T19
+0

Möchten Sie (1) Ansichten unterhalb der Statusleiste platzieren, sodass sie sichtbar sind, oder (2) die Statusleiste verschwinden lassen und die 480-Pixel-Höhe des Bildschirms mit Ihrer App füllen? Ich glaube, dass (1) unmöglich ist, obwohl das "durchscheinende" impliziert, dass es für etwas durchscheinend ist. – Dondragmer

+0

Es ist die erste Option ... Und es ist möglich, mein Freund hat mir schon geholfen, damit es funktioniert. Warten auf ihn, um seine Lösung hier zu posten, um ihm Kredit zu geben. –

Antwort

7

Hier Lösung ohne einzige Zeile Code.

  1. In Interface Builder richten Sie den Ansichtscontroller so ein, dass Vollbild und Freiformgröße gewünscht werden.
  2. In den Größeneinstellungen der Ansicht die Höhe auf 480px setzen
  3. Sicherstellen, dass der Statusleistenstil in Info.plist schwarz durchscheinend ist. und
  4. Einführung beobachten

Siehe die Links für Screenshots von jedem Schritt in den oberen Pfosten.

1

Machen Sie einfach eine negative Y (-20) Koordinate im Interface Builder.

+3

Hey Anton! :) Das Problem ist Y Koordinatenfeld ist deaktiviert ... –

0

Versuchen Sie, den Wert für "Statusleiste" im Abschnitt "Simulierte Metriken" des Attribut-Inspektors in Interface Builder zu ändern. Wenn Sie es auf "Abgeleitet" setzen, macht Xcode keine Annahmen über den View-Controller, sodass Sie die Größe der Ansicht auf JEDE Größe einstellen können (auch Größen, die keinen Sinn ergeben). Informationen zum Verbergen in Ihrer App finden Sie unter this post about the status bar.

+0

Hallo, veränderte simulierte Parameter der Ansichten hatte keine Auswirkungen auf das Ergebnis im Simulator. –

+0

Wenn Sie diese Werte ändern, wird nur die Statusleiste im Interface Builder ausgeblendet. Sie müssen auch 'setStatusBarHidden: ...' _ verwenden, wie in dem Beitrag, mit dem ich verlinkt bin, besprochen wurden. – samson

+0

Das Ziel ist nicht, die Statusleiste zu verstecken, sondern sie auf dem Bildschirm mit einem durchscheinenden schwarzen Stil zu präsentieren und etwas unterlegen zu können. –

2

Okay, nachdem mir gesagt wurde, dass es möglich ist, habe ich versucht, einen Blick auf die Hauptansicht zu legen und seine y-Koordinate auf -20 zu setzen. Dann gehe ich nach Info.plist und setze Status bar style auf Transparent black style (alpha of 0.5). Die Ansicht, die ich platziert habe, war unter der Statusleiste sichtbar.

enter image description here

Dies nur zur Laufzeit passiert ist; In Interface Buider ist die simulierte transluzente Statusleiste grau aber undurchsichtig.

Bearbeiten: Wenn Sie die Hauptansicht des Ansichtscontrollers in diesen Bereich verschieben möchten, ist dies unter viewWillAppear möglich. (Wenn Sie versuchen, es während viewDidLoad zu bewegen, wird es danach zurück bewegt.)

- (void)viewWillAppear:(BOOL)animated; 
{ 
    [super viewWillAppear:animated]; 

    // Move the main view upwards if it isn't already there. 
    CGRect frame = [[self view] frame]; 
    frame.size.height += frame.origin.y; 
    frame.origin.y = 0; 
    [[self view] setFrame:frame]; 
} 

es jedoch wieder nach einer Drehung bewegt wird, und meine Versuche, auf eine Drehung zu reagieren endete die Zellen-Layout zu brechen, wenn ich das tat zu einem UITableView.

Hier ist die Swift-Version. Scheint zu arbeiten. . Gute Lösung diese App Store Screenshots (auch zusätzlich zur Herstellung der info.plist Änderungen für die Aufnahme

Überschreibung func viewWillAppear (animiert: Bool) {

super.viewWillAppear(animated) 

    // Move the main view upwards if it isn't already there. 
    var frame: CGRect = self.view.frame 
    frame.size.height += frame.origin.y 
    frame.origin.y = 0 
    self.view.frame = frame 
} 
+0

Dies kann ich nicht wirklich tun, wenn ich einen UITableViewController in einem Storyboard habe und statische Zellen darin haben möchte. –

+0

@Ivan Karpan: Siehe bearbeiten für eine Teillösung. – Dondragmer

+0

Vielen Dank für die Eingabe. Die Lösung, von der ich erwähnte, dass mein Freund kam, erlaubt es tatsächlich, jegliche Kodierung zu vermeiden und führt zu einem perfekt funktionierenden Ergebnis. Ich werde meine Frage damit aktualisieren und warten, bis er es hier posten kann, damit ich es als Antwort markieren kann. –

Verwandte Themen