usa precio iphone statusbar

precio - Obtener la altura de la barra de estado del iPhone



iphone xr (7)

¿Lo hiciste así?

CGRect rect; rect = [[UIApplication sharedApplication] statusBarFrame]; NSLog(@"Statusbar frame: %1.0f, %1.0f, %1.0f, %1.0f", rect.origin.x, rect.origin.y, rect.size.width, rect.size.height);

Necesito cambiar el tamaño de algunos elementos en relación con la altura de la barra de estado del iPhone. Sé que la barra de estado suele tener 20 puntos de altura, pero este no es el caso cuando está en modo tethering. Se duplica a 40. ¿Cuál es la forma correcta de determinar para determinar su altura? He intentado

[[UIApplication sharedApplication] statusBarFrame]

pero me da 20 x 480 en el paisaje que es correcto, pero luego me da 320 x 40 en el retrato. ¿Por qué no me está dando lo contrario de eso (40 x 320)?


Aquí está la versión Swift si alguien la necesita:

var screenStatusBarHeight: CGFloat { return UIApplication.sharedApplication().statusBarFrame.height }

Esto se incluye como una variable estándar en:

https://github.com/goktugyil/EZSwiftExtensions

Descargo de responsabilidad: Es mi repo


El statusBarFrame devuelve el marco en coordenadas de pantalla. Creo que la forma correcta de obtener lo que esto corresponde a las coordenadas de vista es hacer lo siguiente:

- (CGRect)statusBarFrameViewRect:(UIView*)view { CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; CGRect statusBarWindowRect = [view.window convertRect:statusBarFrame fromWindow: nil]; CGRect statusBarViewRect = [view convertRect:statusBarWindowRect fromView: nil]; return statusBarViewRect; }

Ahora, en la mayoría de los casos, la ventana usa las mismas coordenadas que la pantalla, por lo que [UIWindow convertRect:fromWindow:] no cambia nada, pero en caso de que sean diferentes, este método debería hacer lo correcto.


Este método funciona para orientación vertical y horizontal.

-(float) statusBarHeight { CGSize statusBarSize = [[UIApplication sharedApplication] statusBarFrame].size; return MIN(statusBarSize.width, statusBarSize.height); } // example call float statusBarHeight = [self statusBarHeight];


Podría probar cuál es el menor de los dos valores, que será la altura real.


EDITAR La forma de iOS 11 de averiguar dónde ubicar el principio de su contenido visual es la guía de safeAreaLayoutGuide segura de safeAreaLayoutGuide Consulte la documentación de UIView .

RESPUESTA DEPRECTA Si está apuntando a iOS 7+, la documentación de UIViewController informa que la propiedad topLayoutGuide de topLayoutGuide le proporciona la parte inferior de la barra de estado, o la parte inferior de la barra de navegación, si también está visible. Eso puede ser útil, y ciertamente es menos complicado que muchas de las soluciones anteriores.


Swift 2:

let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.height

Swift 3 o Swift 4:

let statusBarHeight = UIApplication.shared.statusBarFrame.height

Consejo: No olvide inyectar UIApplication.shared no solo use el singleton en su código.