transparente superior reloj quitar pantalla ocultar gris estado desaparece como bloqueo barra ios ios7

superior - La barra de estado y la barra de navegación aparecen sobre los límites de mi vista en iOS 7



ocultar barra de estado iphone (20)

Agregue la clave "Ver apariencia de la barra de estado basada en el controlador" de la lista desplegable como una fila en info.plist Algo como esto:

Recientemente descargué Xcode 5 DP para probar mis aplicaciones en iOS 7. Lo primero que noté y confirmé es que los límites de mi vista no siempre cambian de tamaño para tener en cuenta la barra de estado y la barra de navegación.

En viewDidLayoutSubviews , viewDidLayoutSubviews los límites de la vista:

{{0, 0}, {320, 568}}

Esto hace que mi contenido aparezca debajo de la barra de navegación y la barra de estado.

Sé que podría explicar la altura yo mismo al obtener la altura de la pantalla principal, restando la altura de la barra de estado y la altura de la barra de navegación, pero eso parece un trabajo adicional innecesario.

¿Cómo puedo solucionar este problema?

Actualizar:

He encontrado una solución para este problema específico. Establezca la propiedad translúcida de la barra de navegación en NO:

self.navigationController.navigationBar.translucent = NO;

Esto evitará que la vista se enmarque debajo de la barra de navegación y la barra de estado.

Sin embargo, no he encontrado una solución para el caso cuando desea que la barra de navegación sea translúcida. Por ejemplo, al ver una foto a pantalla completa, deseo que la barra de navegación sea translúcida y la vista que se debe enmarcar debajo. Eso funciona, pero cuando alterno mostrar / ocultar la barra de navegación, he experimentado resultados aún más extraños. La primera subvista (un UIScrollView) obtiene sus límites y el origen cambia cada vez.


Creé mi vista programáticamente y esto terminó trabajando para mí:

- (void) viewDidLayoutSubviews { // only works for iOS 7+ if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { CGRect viewBounds = self.view.bounds; CGFloat topBarOffset = self.topLayoutGuide.length; // snaps the view under the status bar (iOS 6 style) viewBounds.origin.y = topBarOffset * -1; // shrink the bounds of your view to compensate for the offset viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1); self.view.bounds = viewBounds; } }

Source (en la sección topLayoutGuide al final de la página 39).


El truco más simple es abrir el archivo NIB y seguir estos dos simples pasos:

  1. Solo alterna eso y configúralo al que prefieras:
  1. Seleccione aquellos / UIview''s / UIIMageView''s / ... que desea mover hacia abajo. En mi caso, solo se superpuso el logotipo y he establecido el delta en +15; (O -15 si eliges iOS 7 en el paso 1)

Y el resultado :


En el archivo de aplicaciones, agregue una fila, llámelo "Ver el aspecto de la barra de estado basada en el controlador" y configúrelo en NO .


En mi caso habiendo loadView () interrumpido
este código: self.edgesForExtendedLayout = UIRectEdgeNone

pero después de borrar loadView () todo funcionó bien


La solución Swift 3 / Swift 4 que también funciona con archivos NIBs / XIB en iOS 10+:

override func viewDidLoad() { super.viewDidLoad() edgesForExtendedLayout = [] }


Me gustaría ampliar la respuesta de Stunner y agregar una declaración if para comprobar si es iOS-7, porque cuando lo probé en iOS 6, mi aplicación se bloqueaba.

La adición sería añadiendo:

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

Así que sugeriría agregar este método a su archivo MyViewControler.m :

- (void) viewDidLayoutSubviews { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) { CGRect viewBounds = self.view.bounds; CGFloat topBarOffset = self.topLayoutGuide.length; viewBounds.origin.y = topBarOffset * -1; self.view.bounds = viewBounds; } }


No tiene que calcular a qué distancia se puede desplazar todo, hay una estructura de propiedad para esto. En Interface Builder, resalte su controlador de vista y luego navegue hasta el inspector de atributos. Aquí verá algunas casillas de verificación junto a las palabras "Extender bordes". Como puede ver, en la primera captura de pantalla, la selección predeterminada es que el contenido aparezca debajo de las barras superior e inferior, pero no debajo de las barras opacas, por lo que configurar el estilo de la barra para que no sea translúcido funcionó para usted.

Como se puede ver en la primera captura de pantalla, hay dos elementos de la interfaz de usuario ocultos debajo de la barra de navegación. (He habilitado wireframes en IB para ilustrar esto) Estos elementos, un UIButton y un UISegmentedControl tienen su origen "y" establecido en cero, y el controlador de vista está configurado para permitir contenido debajo de la barra superior.

Esta segunda captura de pantalla muestra lo que sucede cuando deselecciona la casilla de verificación "Debajo de las barras superiores". Como puede ver, la vista de los controladores de vista se ha desplazado hacia abajo de manera adecuada para que su origen se encuentre justo debajo de la barra de navegación.

Esto también se puede realizar mediante programación mediante el uso de -[UIViewController edgesForExtendedLayout] . Aquí hay un enlace a la referencia de clase para edgeForExtendedLayout , y para UIRectEdge

[self setEdgesForExtendedLayout:UIRectEdgeNone];


Para mí, la solución más sencilla es agregar dos claves al plist


Pasos para ocultar la barra de estado en iOS 7:

1. Vaya a su archivo info.plist aplicación.

2. Y Establecer, Ver el aspecto de la barra de estado basada en el controlador: Booleano NO

Espero haber resuelto el problema de la barra de estado .....


Puede lograr esto implementando una nueva propiedad llamada edgesForExtendedLayout en iOS7 SDK. Por favor agregue el siguiente código para lograr esto,

if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) self.edgesForExtendedLayout = UIRectEdgeNone;

-(void)viewDidLoad agregar lo anterior en su método -(void)viewDidLoad .

iOS 7 trae varios cambios en la forma en que diseña y personaliza la apariencia de su interfaz de usuario . Los cambios en el diseño del controlador de vista, el color del tinte y la fuente afectan a todos los objetos UIKit en su aplicación. Además, las mejoras en las API de reconocimiento de gestos le brindan un control más preciso sobre las interacciones de gestos.

Usando Controladores de Vista

En iOS 7, los controladores de vista utilizan el diseño de pantalla completa. Al mismo tiempo, iOS 7 le brinda un control más granular sobre la forma en que un controlador de vista establece sus vistas. En particular, el concepto de diseño de pantalla completa se ha refinado para permitir que un controlador de vista especifique el diseño de cada borde de su vista.

La propiedad del controlador de vista wantsFullScreenLayout está en desuso en iOS 7. Si actualmente especifica wantsFullScreenLayout = NO , el controlador de vista puede mostrar su contenido en una ubicación de pantalla inesperada cuando se ejecuta en iOS 7.

Para ajustar cómo un controlador de vista establece sus vistas, UIViewController proporciona las siguientes propiedades:

  • edgesForExtendedLayout

La propiedad edgesForExtendedLayout usa el tipo UIRectEdge , que especifica cada uno de los cuatro bordes de un rectángulo, además de no especificar ninguno y todos. Use edgesForExtendedLayout para especificar qué bordes de una vista deben extenderse, independientemente de la translucidez de la barra. De forma predeterminada, el valor de esta propiedad es UIRectEdgeAll .

  • ExtendedLayoutIncludesOpaqueBars

Si su diseño utiliza barras opacas, refine edgesForExtendedLayout al establecer también la propiedad extendedLayoutIncludesOpaqueBars en NO . (El valor predeterminado de extendedLayoutIncludesOpaqueBars es NO .)

  • automaticAdjustsScrollViewInsets

Si no desea que las inserciones de contenido de una vista de desplazamiento se ajusten automáticamente, configure automaticallyAdjustsScrollViewInsets Ajusta Estiramientos de desplazamiento en NO . (El valor predeterminado de automaticallyAdjustsScrollViewInsets es YES ).

  • topLayoutGuide, bottomLayoutGuide

Las propiedades topLayoutGuide y bottomLayoutGuide indican la ubicación de los bordes de la barra superior o inferior en la vista de un controlador de vista. Si las barras se superponen en la parte superior o inferior de una vista, puede usar Interface Builder para topLayoutGuide la vista relativa a la barra creando restricciones en la parte inferior de topLayoutGuide o en la parte superior de bottomLayoutGuide. (Si no hay barras que se superpongan a la vista, la parte inferior de topLayoutGuide es la misma que la parte superior de la vista y la parte superior de bottomLayoutGuide es la misma que la parte inferior de la vista). Ambas propiedades se crean perezosamente cuando se solicitan.

Por favor refiérase, Apple Doc


Si desea que la vista tenga la barra de navegación translúcida (que es agradable), debe configurar un ContentInset o similar.

Así es como lo hago:

// Check if we are running on ios7 if([[[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."][0] intValue] >= 7) { CGRect statusBarViewRect = [[UIApplication sharedApplication] statusBarFrame]; float heightPadding = statusBarViewRect.size.height+self.navigationController.navigationBar.frame.size.height; myContentView.contentInset = UIEdgeInsetsMake(heightPadding, 0.0, 0.0, 0.0); }


Solución rápida:

override func viewWillAppear(animated: Bool) { super.viewWillAppear(animated) self.edgesForExtendedLayout = UIRectEdge.None }


Swift 4.2 - Xcode 10.0 - iOS 12.0:

if #available(iOS 11.0, *) {} else { self.edgesForExtendedLayout = [] self.navigationController?.view.backgroundColor = .white }


Tengo un escenario en el que utilizo el BannerViewController escrito por Apple para mostrar mis anuncios y un ScrollViewController integrado en el BannerViewController.

Para evitar que la barra de navegación oculte mi contenido, tuve que hacer dos cambios.

1) Modificar BannerViewController.m

- (void)viewDidLoad { [super viewDidLoad]; float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (systemVersion >= 7.0) { self.edgesForExtendedLayout = UIRectEdgeNone; } }

2) Modificar mi ScrollViewContoller

- (void)viewDidLoad { [super viewDidLoad]; float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (systemVersion >= 7.0) { self.edgesForExtendedLayout = UIRectEdgeBottom; } }

Ahora los anuncios se muestran correctamente en la parte inferior de la vista en lugar de estar cubiertos por la barra de navegación y el contenido en la parte superior no se corta.


Tuve el mismo problema con mi aplicación por iPads (armv7, armv7s, amr64) solo al presentar otro UIViewController y, después de descartarlos, va a la barra de navegación bajo la barra de estado ... Dedico mucho tiempo a encontrar alguna solución para eso. Estoy usando el guión gráfico y en InterfaceBuilder para UIViewController, lo que hace que sea terrible configurar la Presentación desde FullScreen -> Contexto actual y que solucione este problema. Funciona en mi aplicación solo para iPads => iOS8.0 (probando con iOS8.1) y para iPads con iOS 7.1 no funciona !!


hacer una restricción a la disposición superior como esta


solo establece el siguiente código a la vista aparecerá.

if ([[[UIDevice currentDevice] systemVersion] floatValue]<= 7) { self.edgesForExtendedLayout = UIRectEdgeNone; }


edgesForExtendedLayout hace el truco para iOS 7. Sin embargo, si construye la aplicación en iOS 7 SDK y la implementa en iOS 6, la barra de navegación aparece translúcida y las vistas se ubican debajo. Entonces, para solucionarlo tanto para iOS 7 como para iOS 6, haga esto:

self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque; if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) self.edgesForExtendedLayout = UIRectEdgeNone; // iOS 7 specific


Swift 3

override func viewWillAppear(_ animated: Bool) { self.edgesForExtendedLayout = [] }