[UIApplication sharedApplication].statusBarFrame.size.height
. Pero como todos los tamaños están en puntos, no en píxeles, la altura de la barra de estado siempre es igual a 20.
Actualizar. Al ver que esta respuesta se considera útil, debería dar más detalles.
La altura de la barra de estado es, de hecho, igual a 20.0f puntos, excepto los siguientes casos:
- la barra de estado se ha ocultado con el
setStatusBarHidden:withAnimation:
método y su altura es igual a 0.0f puntos;
- Como señaló @Anton aquí, durante una llamada entrante fuera de la aplicación del teléfono o durante la altura de la barra de estado de la sesión de grabación de sonido es igual a 40.0f puntos.
También hay un caso de barra de estado que afecta la altura de su vista. Normalmente, la altura de la vista es igual a la dimensión de la pantalla para la orientación dada menos la altura de la barra de estado. Sin embargo, si anima la barra de estado (mostrar u ocultar) después de que se muestra la vista, la barra de estado cambiará su marco, pero la vista no lo hará, deberá cambiar el tamaño manualmente después de la animación de la barra de estado (o durante la animación desde la altura de la barra de estado se establece en el valor final al comienzo de la animación).
Actualización 2. También hay un caso de orientación de la interfaz de usuario. La barra de estado no respeta el valor de orientación, por lo tanto, el valor de altura de la barra de estado para el modo vertical es [UIApplication sharedApplication].statusBarFrame.size.height
(sí, la orientación predeterminada es siempre vertical, no importa lo que diga la información de su aplicación), para horizontal - [UIApplication sharedApplication].statusBarFrame.size.width
. Para determinar la orientación actual de la IU cuando está fuera UIViewController
y self.interfaceOrientation
no está disponible, use [UIApplication sharedApplication].statusBarOrientation
.
Actualización para iOS7. Aunque el estilo visual de la barra de estado cambió, todavía está allí, su marco todavía se comporta igual. El único hallazgo interesante de la barra de estado que tiene - que comparten: el UINavigationBar
que está alicatado de fondo también se dispondrán en mosaico a la barra de estado, para que pueda lograr algunos efectos interesantes de diseño o simplemente el color de la barra de estado. Esto tampoco afectará la altura de la barra de estado de ninguna manera.
Vaya con la sugerencia de Martin a la pregunta: Obtener la altura de la barra de estado del iPhone .
Y en Swift
Parece un truco, pero en realidad es bastante sólido. De todos modos, es la única solución de trabajo.
Vieja respuesta
El siguiente código, que iría en su subclase personalizada de
UIViewController
, casi funcionó para soportar el paisaje. Pero, noté un caso de esquina (cuando giraba desde la derecha> no compatible al revés> izquierda) para el que no funcionaba (altura y ancho cambiados).fuente
statusBarFrame
se devuelve como el valor antes de la transformación.var statusBarHeight: CGFloat
Prueba esto:
fuente
Swift 3 o Swift 4:
fuente
Si bien la barra de estado generalmente tiene una altura de 20 puntos, puede ser el doble de esa cantidad en algunas situaciones:
Solo pruébalo y lo verás por ti mismo. Codificar la altura a 20pt generalmente funcionará, hasta que no lo haga.
Así que secundo la respuesta de H2CO3:
fuente
EDITAR La manera de iOS 11 de averiguar dónde colocar la parte superior del contenido de su vista es
safeAreaLayoutGuide
Ver la documentación de UIView de UIView .RESPUESTA DESAPROBADA Si está apuntando a iOS 7+, la documentación para UIViewController informa que la
topLayoutGuide
propiedad viewController le proporciona la parte inferior de la barra de estado, o la parte inferior de la barra de navegación, si también es visible. Eso puede ser útil, y ciertamente es menos pirateo que muchas de las soluciones anteriores.fuente
¡No olvide que el marco de la barra de estado estará en el espacio de coordenadas de la pantalla! Si inicia en modo horizontal, es posible que el ancho y la altura se intercambien. Le recomiendo que use esta versión del código si admite orientaciones horizontales:
Luego puede leer la propiedad de altura de statusBarFrame directamente. 'Vista' en este caso debería ser la vista en la que desea hacer uso de las mediciones, probablemente el controlador de vista raíz de la ventana de la aplicación.
Por cierto, la barra de estado no solo puede ser más alta durante las llamadas telefónicas, sino que también puede ser cero si la barra de estado se ha ocultado deliberadamente.
fuente
Aquí hay una forma rápida de obtener la altura de la barra de estado de la pantalla:
Estos se incluyen como una función estándar en un proyecto mío: https://github.com/goktugyil/EZSwiftExtensions
fuente
Para iOS 13 puedes usar:
fuente
fuente
Por defecto, la altura de la barra de estado en iOS es
20 pt
.Más información: http://www.idev101.com/code/User_Interface/sizes.html
fuente
Acabo de encontrar una manera que no le permite acceder directamente a la altura de la barra de estado, sino calcularla.
Altura de la barra de navegación - topLayoutGuide length = altura de la barra de estado
Rápido:
self.topLayoutGuide.length
es el área superior que está cubierta por la barra translúcida, yself.navigationController?.navigationBar.frame.height
es la barra translúcida excluyendo la barra de estado, que generalmente es de 44 puntos. Entonces, al usar este método, puede calcular fácilmente la altura de la barra de estado sin preocuparse por el cambio de altura de la barra de estado debido a llamadas telefónicas.fuente
self.topLayoutGuide.length
es 0, por lo que el resultado termina siendo -44.Swift 5
UIApplication.shared.statusBarFrame.height
fuente
Usando el siguiente código de línea única puede obtener la altura de la barra de estado en cualquier orientación y también si es visible o no
Es una macro simple pero muy útil, solo prueba esto, no necesitas escribir ningún código adicional
fuente