[UIApplication sharedApplication].statusBarFrame.size.height
. Mais comme toutes les tailles sont en points et non en pixels, la hauteur de la barre d'état est toujours égale à 20.
Mettre à jour. Voyant cette réponse jugée utile, je devrais élaborer.
La hauteur de la barre d'état est en effet égale à 20,0 points, sauf dans les cas suivants:
- la barre d'état a été masquée avec la
setStatusBarHidden:withAnimation:
méthode et sa hauteur est égale à 0,0f points;
- comme @Anton l'a souligné ici, lors d'un appel entrant en dehors de l'application Téléphone ou pendant la hauteur de la barre d'état de la session d'enregistrement sonore est égale à 40,0 points.
Il y a aussi un cas de barre d'état affectant la hauteur de votre vue. Normalement, la hauteur de la vue est égale à la dimension de l'écran pour une orientation donnée moins la hauteur de la barre d'état. Toutefois, si vous animez la barre d' état (afficher ou à masquer) après le point de vue a été montré, la barre d'état changera son cadre, mais la vue ne sera pas , vous devrez redimensionner manuellement la vue après l' animation de la barre d'état (ou pendant l' animation depuis la hauteur de la barre d'état prend la valeur finale au début de l'animation).
Mise à jour 2. Il y a aussi un cas d'orientation de l'interface utilisateur. La barre d'état ne respecte pas la valeur d'orientation, donc la valeur de la hauteur de la barre d'état pour le mode portrait est [UIApplication sharedApplication].statusBarFrame.size.height
(oui, l'orientation par défaut est toujours portrait, peu importe ce que dit votre application info.plist), pour le paysage - [UIApplication sharedApplication].statusBarFrame.size.width
. Pour déterminer l'orientation actuelle de l'interface utilisateur lorsqu'elle est en dehors de UIViewController
et self.interfaceOrientation
n'est pas disponible, utilisez [UIApplication sharedApplication].statusBarOrientation
.
Mise à jour pour iOS7. Même si le style visuel de la barre d'état a changé, il est toujours là, son cadre se comporte toujours de la même manière. La seule découverte intéressante sur la barre d'état je me suis - part I: votre UINavigationBar
« s carrelage fond sera également carrelée à la barre d'état, de sorte que vous pouvez obtenir des effets de design intéressant ou tout simplement la couleur de votre barre d'état. Cela n'affectera pas non plus la hauteur de la barre d'état.
Allez avec la suggestion de Martin à la question: Obtenez la hauteur de la barre d'état de l'iPhone .
Et dans Swift
Cela ressemble à un hack, mais c'est en fait assez solide. Quoi qu'il en soit, c'est la seule solution qui fonctionne.
Ancienne réponse
Le code suivant, qui irait dans votre sous-classe personnalisée de
UIViewController
, a presque fonctionné pour prendre en charge le paysage. Mais, j'ai remarqué un boîtier d'angle (en tournant de droite> non pris en charge à l'envers> à gauche) pour lequel cela ne fonctionnait pas (hauteur et largeur changées).la source
statusBarFrame
est retourné comme valeur avant la transformation.var statusBarHeight: CGFloat
Essaye ça:
la source
Swift 3 ou Swift 4:
la source
Bien que la barre d'état mesure généralement 20 points de hauteur, elle peut être deux fois plus élevée dans certaines situations:
Essayez-le et vous verrez par vous-même. Le codage en dur de la hauteur à 20 pt fonctionnera généralement, jusqu'à ce qu'il ne fonctionne pas.
J'appuie donc la réponse de H2CO3:
la source
EDIT L'iOS 11 façon de travailler où placer le haut du contenu de votre vue est de UIView
safeAreaLayoutGuide
Voir la documentation UIView .RÉPONSES DÉPRÉCIÉES Si vous ciblez iOS 7+, la documentation d'UIViewController indique que la
topLayoutGuide
propriété viewController vous donne le bas de la barre d'état ou le bas de la barre de navigation, si elle est également visible. Cela peut être utile et est certainement moins piraté que la plupart des solutions précédentes.la source
N'oubliez pas que le cadre de la barre d'état sera dans l'espace de coordonnées de l'écran! Si vous lancez en mode paysage, vous pouvez constater que la largeur et la hauteur sont inversées. Je vous recommande fortement d'utiliser cette version du code à la place si vous prenez en charge les orientations paysage:
Vous pouvez ensuite lire directement la propriété height de statusBarFrame. La «vue» dans ce cas doit être la vue dans laquelle vous souhaitez utiliser les mesures, probablement le contrôleur de vue racine de la fenêtre de l'application.
Par ailleurs, non seulement la barre d'état peut être plus haute pendant les appels téléphoniques, mais elle peut également être nulle si la barre d'état a été délibérément masquée.
la source
Pour iOS 13, vous pouvez utiliser:
la source
Voici une façon rapide d'obtenir la hauteur de la barre d'état de l'écran:
Ceux-ci sont inclus en tant que fonction standard dans un de mes projets: https://github.com/goktugyil/EZSwiftExtensions
la source
la source
Par défaut, la hauteur de la barre d'état dans iOS est
20 pt
.Plus d'informations: http://www.idev101.com/code/User_Interface/sizes.html
la source
Je viens de trouver un moyen qui vous permet de ne pas accéder directement à la hauteur de la barre d'état, mais de la calculer.
Hauteur de la barre de navigation - topLayoutGuide length = hauteur de la barre d'état
Rapide:
self.topLayoutGuide.length
est la zone supérieure couverte par la barre translucide, etself.navigationController?.navigationBar.frame.height
est la barre translucide à l'exclusion de la barre d'état, qui est généralement de 44 points. Ainsi, en utilisant cette méthode, vous pouvez facilement calculer la hauteur de la barre d'état sans vous soucier du changement de hauteur de la barre d'état en raison des appels téléphoniques.la source
self.topLayoutGuide.length
c'est 0 donc le résultat finit par être -44.Swift 5
UIApplication.shared.statusBarFrame.height
la source
En utilisant le code de ligne unique suivant, vous pouvez obtenir la hauteur de la barre d'état dans n'importe quelle orientation et également si elle est visible ou non
C'est juste une macro simple mais très utile, essayez ceci, vous n'avez pas besoin d'écrire de code supplémentaire
la source