[UIApplication sharedApplication].statusBarFrame.size.height
. Da jedoch alle Größen in Punkten und nicht in Pixeln angegeben sind, beträgt die Höhe der Statusleiste immer 20.
Aktualisieren. Da diese Antwort als hilfreich angesehen wird, sollte ich näher darauf eingehen.
Die Höhe der Statusleiste beträgt in der Tat 20,0 f Punkte, außer in folgenden Fällen:
- Die Statusleiste wurde mit der
setStatusBarHidden:withAnimation:
Methode ausgeblendet und ihre Höhe entspricht 0,0 f Punkten.
- Wie @Anton hier hervorhob, beträgt die Höhe der Statusleiste während eines eingehenden Anrufs außerhalb der Telefonanwendung oder während der Statusleiste der Tonaufzeichnungssitzung 40,0 f Punkte.
Es gibt auch einen Fall von Statusleisten, die sich auf die Höhe Ihrer Ansicht auswirken. Normalerweise entspricht die Höhe der Ansicht der Bildschirmgröße für die angegebene Ausrichtung abzüglich der Höhe der Statusleiste. Wenn Sie jedoch die Statusleiste animieren (anzeigen oder ausblenden), nachdem die Ansicht angezeigt wurde, ändert die Statusleiste ihren Rahmen, die Ansicht jedoch nicht . Sie müssen die Größe der Ansicht nach der Animation der Statusleiste (oder während der Animation seitdem manuell ändern) Die Höhe der Statusleiste wird zu Beginn der Animation auf den Endwert gesetzt.
Update 2. Es gibt auch einen Fall der Ausrichtung der Benutzeroberfläche. Statusleiste nicht respektiert den Orientierungswert, also Statusleiste Höhenwert für Portrait - Modus ist [UIApplication sharedApplication].statusBarFrame.size.height
(ja, Standardausrichtung ist immer Porträt, egal , was Ihre Anwendung info.plist sagt), für Landschaft - [UIApplication sharedApplication].statusBarFrame.size.width
. Verwenden Sie, um die aktuelle Ausrichtung der Benutzeroberfläche außerhalb UIViewController
und self.interfaceOrientation
nicht verfügbar zu bestimmen [UIApplication sharedApplication].statusBarOrientation
.
Update für iOS7. Obwohl sich der visuelle Stil der Statusleiste geändert hat, ist er immer noch vorhanden, und sein Rahmen verhält sich immer noch gleich. Die einzige interessante Entdeckung über Statusleiste habe ich - ich teile: Ihr UINavigationBar
‚s gekachelten Hintergrund wird auch auf Statusleiste mit Ziegeln gedeckt werden, so dass Sie einige interessante Design - Effekte erzielen oder einfach nur Ihre Statusleiste färben. Auch dies hat keinerlei Einfluss auf die Höhe der Statusleiste.
Gehen Sie mit Martins Vorschlag auf die Frage: Holen Sie sich die Höhe der iPhone-Statusleiste .
Und in Swift
Es scheint wie ein Hack, aber es ist eigentlich ziemlich solide. Auf jeden Fall ist es die einzige funktionierende Lösung.
Alte Antwort
Der folgende Code, der in Ihre benutzerdefinierte Unterklasse von passt
UIViewController
, hat fast zur Unterstützung der Landschaft beigetragen. Aber ich bemerkte ein Eckgehäuse (beim Drehen von rechts> nicht unterstützt auf den Kopf> links), für das es nicht funktionierte (Höhe und Breite umgeschaltet).quelle
statusBarFrame
wird als Wert vor der Transformation zurückgegeben.var statusBarHeight: CGFloat
Versuche dies:
quelle
Swift 3 oder Swift 4:
quelle
Während die Statusleiste normalerweise 20pt hoch ist, kann sie in einigen Situationen doppelt so hoch sein:
Probieren Sie es einfach aus und Sie werden es selbst sehen. Das Hardcodieren der Höhe auf 20pt funktioniert normalerweise, bis dies nicht mehr der Fall ist.
Also stimme ich der Antwort von H2CO3 zu:
quelle
BEARBEITEN Die iOS 11-Methode, um herauszufinden, wo Sie den oberen Rand Ihres Ansichtsinhalts platzieren können, ist UIViews
safeAreaLayoutGuide
See UIView Documentation .VERRINGERTE ANTWORT Wenn Sie auf iOS 7+ abzielen, wird in der Dokumentation zu UIViewController empfohlen, dass die
topLayoutGuide
Eigenschaft viewController Ihnen den unteren Rand der Statusleiste oder den unteren Rand der Navigationsleiste anzeigt, sofern diese ebenfalls sichtbar ist. Das kann von Nutzen sein und ist sicherlich weniger hack als viele der vorherigen Lösungen.quelle
Vergessen Sie nicht, dass sich der Rahmen der Statusleiste im Koordinatenraum des Bildschirms befindet! Wenn Sie im Querformat starten, werden möglicherweise Breite und Höhe vertauscht. Ich empfehle dringend, stattdessen diese Version des Codes zu verwenden, wenn Sie Landschaftsorientierungen unterstützen:
Sie können dann die height-Eigenschaft von statusBarFrame direkt lesen. 'Ansicht' sollte in diesem Fall die Ansicht sein, in der Sie die Messungen verwenden möchten, höchstwahrscheinlich der Root-View-Controller des Anwendungsfensters.
Im Übrigen kann die Statusleiste bei Telefonanrufen nicht nur höher sein, sondern auch Null, wenn die Statusleiste absichtlich ausgeblendet wurde.
quelle
Hier ist ein schneller Weg, um die Höhe der Bildschirmstatusleiste zu ermitteln:
Diese sind als Standardfunktion in einem meiner Projekte enthalten: https://github.com/goktugyil/EZSwiftExtensions
quelle
Für iOS 13 können Sie verwenden:
quelle
quelle
Standardmäßig ist die Höhe der Statusleiste in iOS
20 pt
.Weitere Informationen: http://www.idev101.com/code/User_Interface/sizes.html
quelle
Ich habe gerade einen Weg gefunden, mit dem Sie nicht direkt auf die Höhe der Statusleiste zugreifen, sondern diese berechnen können.
Höhe der Navigationsleiste - topLayoutGuide-Länge = Höhe der Statusleiste
Schnell:
self.topLayoutGuide.length
ist der oberste Bereich, der von der durchscheinenden Leiste abgedeckt wird, undself.navigationController?.navigationBar.frame.height
ist die durchscheinende Leiste ohne Statusleiste, die normalerweise 44pt beträgt. Mit dieser Methode können Sie die Höhe der Statusleiste einfach berechnen, ohne sich Gedanken über die Änderung der Statusleistenhöhe aufgrund von Telefonanrufen machen zu müssen.quelle
self.topLayoutGuide.length
ist 0 und das Ergebnis ist -44.Swift 5
UIApplication.shared.statusBarFrame.height
quelle
Mit dem folgenden einzeiligen Code können Sie die Höhe der Statusleiste in jeder Ausrichtung abrufen und auch, ob sie sichtbar ist oder nicht
Es ist nur ein einfaches, aber sehr nützliches Makro. Versuchen Sie es einfach. Sie müssen keinen zusätzlichen Code schreiben
quelle