Je sais qu'actuellement la barre d'état (avec l'heure, la batterie et la connexion réseau) en haut de l'iPhone/iPad est de 20 pixels pour les écrans non rétines et de 40 pixels pour les écrans rétines. pour pouvoir le déterminer sans coder en dur. Est-il possible de déterminer la hauteur de la barre d'état par programme?
[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.
Mise à jour. Voyant cette réponse considérée comme utile, je devrais élaborer.
La hauteur de la barre d'état est en effet égale à 20,0 points , sauf dans les cas suivants:
setStatusBarHidden:withAnimation:
et sa hauteur est égale à 0,0f points;Il existe également 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. Cependant, si vous animez la barre d'état (affichez ou masquez-la) après l'affichage de la vue, la barre d'état changera de cadre, mais la vue ne le sera pas , vous devrez redimensionner manuellement la vue après l'animation de la barre d'état (ou pendant l'animation car la hauteur de la barre d'état est définie sur 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. La hauteur de la barre d'état pour le mode portrait est donc [UIApplication sharedApplication].statusBarFrame.size.height
(oui, l'orientation par défaut est toujours portrait, peu importe ce que dit votre application info.plist), pour paysage - [UIApplication sharedApplication].statusBarFrame.size.width
. Pour déterminer l'orientation actuelle de l'interface utilisateur lorsque UIViewController
et self.interfaceOrientation
ne sont pas disponibles, utilisez [UIApplication sharedApplication].statusBarOrientation
.
Mise à jour pour iOS7. Même si le style visuel de la barre d'état a changé, il reste toujours présent, mais son cadre se comporte toujours de la même manière. La seule découverte intéressante concernant la barre d’état que j’ai eue - je partage: votre arrière-plan en mosaïque de UINavigationBar
sera également affiché en mosaïque dans la barre d’état. obtenir des effets de conception intéressants ou simplement colorer votre barre d’état. Cela aussi n’affectera en aucune façon la hauteur de la barre d’état.
Allez avec suggestion de Martin à la question: Obtenir la hauteur de la barre d'état de l'iPhone .
CGFloat AACStatusBarHeight()
{
CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size;
return MIN(statusBarSize.width, statusBarSize.height);
}
Et à Swift
func statusBarHeight() -> CGFloat {
let statusBarSize = UIApplication.shared.statusBarFrame.size
return Swift.min(statusBarSize.width, statusBarSize.height)
}
Cela ressemble à un bidouillage, mais c'est en fait assez solide. Quoi qu'il en soit, c'est la seule solution qui fonctionne.
Le code suivant, qui irait dans votre sous-classe personnalisée de UIViewController
, fonctionnait presque pour supporter paysage. Mais, j'ai remarqué un cas de coin (lors de la rotation de droite> non pris en charge à l'envers> à gauche) pour lequel cela ne fonctionnait pas (changement de hauteur et de largeur).
BOOL isPortrait = self.interfaceOrientation == UIInterfaceOrientationPortrait;
CGSize statusBarSize = [UIApplication sharedApplication].statusBarFrame.size;
CGFloat statusBarHeight = (isPortrait ? statusBarSize.height : statusBarSize.width);
Essaye ça:
CGFloat statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
Swift 3 ou Swift 4:
UIApplication.shared.statusBarFrame.height
Bien que la barre d'état mesure généralement 20 points, elle peut être le double de ce nombre dans certaines situations:
Essayez-le et vous verrez par vous-même. Le codage en dur de la hauteur à 20 points fonctionnera généralement, jusqu’à ce que ce ne soit pas le cas.
J'appuie donc la réponse de H2CO3:
statusBarHeight = [[UIApplication sharedApplication] statusBarFrame].size.height;
EDIT Le moyen utilisé par iOS 11 pour savoir où placer le haut de votre contenu de vue est UIView's safeAreaLayoutGuide
See IView Documentation .
REPONSE DEPRECÉE Si vous ciblez iOS 7+, la documentation de UIViewController indique que la propriété topLayoutGuide
de viewController vous indique le bas de l'état. barre, ou le bas de la barre de navigation, si elle est également visible. Cela peut être utile et est certainement moins bidon que beaucoup des solutions précédentes.
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 constaterez peut-être que la largeur et la hauteur sont échangées. Je vous recommande fortement d'utiliser cette version du code si vous supportez les orientations paysage:
CGRect statusBarFrame = [self.window convertRect:[UIApplication sharedApplication].statusBarFrame toView:view];
Vous pouvez ensuite lire directement la propriété height de statusBarFrame. Dans ce cas, "vue" devrait être la vue dans laquelle vous souhaitez utiliser les mesures, probablement le contrôleur de vue racine de la fenêtre de l'application.
Incidemment, non seulement la barre d'état peut-elle ê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.
Voici un moyen Swift d'obtenir la hauteur de la barre d'état de l'écran:
var screenStatusBarHeight: CGFloat {
return UIApplication.sharedApplication().statusBarFrame.height
}
Celles-ci sont incluses en tant que fonction standard dans un de mes projets: https://github.com/goktugyil/EZSwiftExtensions
Par défaut, la hauteur de la barre d'état dans iOS est 20 pt
.
Plus d'infos: http://www.idev101.com/code/User_Interface/sizes.html
Je viens de trouver un moyen de ne pas accéder directement à la hauteur de la barre d'état, mais de le calculer.
Hauteur de la barre de navigation - topLayoutGuide length = hauteur de la barre d'état
Rapide:
let statusBarHeight = self.topLayoutGuide.length-self.navigationController?.navigationBar.frame.height
self.topLayoutGuide.length
est la zone supérieure couverte par la barre translucide et self.navigationController?.navigationBar.frame.height
est la barre translucide excluant la barre d'état, qui est généralement de 44 pt. Ainsi, en utilisant cette méthode, vous pouvez facilement calculer la hauteur de la barre d’état sans s’inquiéter du changement de hauteur de la barre d’état dû aux appels téléphoniques.