item bar uiview uiviewcontroller uinavigationbar frame ios7

uiview - bar - navigation controller swift 4



ios 7 problema con el marco de UiView (6)

Estoy ejecutando la misma aplicación en iOS6 y iOS7 que tiene NavigationBar. Funciona bien en iOS6, pero en iOS7, todas las vistas se ven un poco como si no estuviera teniendo en cuenta la barra de navegación.

He intentado cambiar la propiedad de la barra superior en la opción de métricas simuladas, pero no funciona. Considera la posición de Button desde NavigationBar en iOS6, pero en iOS7, lo considera desde la parte superior de la pantalla.

¿Cuál es el motivo?

Gracias por adelantado.


Debe usar la línea inferior para corregirlo en su vista.

self.edgesForExtendedLayout = UIRectEdgeNone;


En el momento de esta respuesta, iOS 7 todavía estaba bajo NDA, por lo que no fue posible escribir la solución real. Para ayudar de todos modos, publiqué un enlace de ayuda disponible solo para desarrolladores registrados.

==== Publicación original: ====

Lea la Guía de transición de iOS 7 . Su sección ''Actualizando la UI'' explica cómo solucionar su problema.


En iOS 7, los controladores de visualización usan diseño de pantalla completa. se menciona en la guía de transición de la interfaz de usuario de iOS 7

si desea cambiar el diseño, use la propiedad edgesForExtendedLayout

ejemplo:

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


En la "Guía de transición de la IU de iOS 7" para Diseño y Apariencia también se menciona: en iOS7, los controladores de vista usan el diseño de pantalla completa.

Si queremos que la vista muestre la siguiente ubicación desde la barra de navegación, puede modificar los bordes de UIViewController para esta propiedad para lograr.

edgesForExtendedLayout es un tipo de atributo UIExtendedEdge que especifica la dirección del borde que se va a extender.

Como iOS7 fomenta el diseño de pantalla completa, su valor predeterminado es natural para ser UIRectEdgeAll, ambos se extienden alrededor del borde, es decir, si hay incluso la vista navigationBar, debajo de tabBar, la vista extenderá la cobertura al área circundante.

Si hacemos la siguiente configuración de vista, entonces la vista no se extenderá a los que están detrás de la barra, por lo que la etiqueta salió. Ver fuente de impresión

self . edgesForExtendedLayout = UIRectEdgeNone ;


Tuve un problema similar y descubrí que si desactivas la translucidez de la barra de navegación, las vistas se mostrarán de la misma manera que en iOS6.

self.navigationController.navigationBar.translucent = NO;


if([self respondsToSelector:@selector(edgesForExtendedLayout)]) [self setEdgesForExtendedLayout:UIRectEdgeBottom];