example bar iphone ios uiview ios7 navigationbar

iphone - bar - uinavigationitem



Vista oculta debajo de UINavigationBar iOS 7 (9)

Busque esta clave: UIViewControllerBasedStatusBarAppearance .

Se utiliza en el archivo PLIST de su aplicación y aparecerá como:

Ver la apariencia de la barra de estado basada en el controlador

Esto le permitirá controlar la apariencia de la barra de estado. Hay un montón de cambios API para las barras de estado, eche un vistazo a la documentación de los nuevos métodos UIViewController , como

- (void)prefersStatusBarHidden;

Anteriormente, estaba usando iOS 6.1 para mi proyecto. Recientemente cambié a iOS 7. Porque, conocí muchos cambios, actualicé mi código ... Pero he observado un comportamiento extraño. Mi vista en cada pantalla se oculta debajo de la barra de navegación. La vista de reposición soluciona el problema para iOS7, pero crea problemas para las versiones anteriores de iOS.

¿Alguien puede explicarme, cuál es el motivo y por qué sucede? ¿Qué ha cambiado en iOS 7 que está causando este problema?

Cualquier ayuda sería apreciada..


Puede detener sus vistas bajo la barra de navegación, en su viewController:

self.edgesForExtendedLayout = UIRectEdgeNone;


El punto # 7 en esta lista es el truco. Todavía tiene que envolverlo en el código de comprobación de iOS 7 como la respuesta de @null:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (systemVersion >= 7.0) { viewController.edgesForExtendedLayout = UIRectEdgeNone; }

Todo el artículo es útil para aquellos que hacen la transición a iOS 7.


Si no necesita una barra de navegación translúcida en su aplicación, puede solucionar esto en iOS7 e iOS6 sin cambios de código.

En el guión gráfico, seleccione su controlador de navegación y luego abra "Attributes Inspector". Luego, en "Métricas simuladas", configure "Barra superior" a algún valor pero no a "translúcido":

Ahora sus puntos de vista en iOS6 e iOS7 tendrán el mismo posicionamiento que antes.


Swift 3+:

self.edgesForExtendedLayout = []


Utilice esta propiedad para su VC, a fin de evitar la superposición de su barra de estado con su VC Swift:

self.edgesForExtendedLayout = []

C objetivo

self.edgesForExtendedLayout = UIRectEdgeNone;


Para mí, la mejor manera para la Navigation Bar transparente es cambiar la imagen de sombra y la imagen de fondo de la barra.

navigationController?.navigationBar.isTranslucent = true navigationController?.navigationBar.backgroundColor = nil navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navBarBackground")?.resizableImage(withCapInsets: .zero, resizingMode: .stretch), for: .default) navigationController?.navigationBar.shadowImage = UIImage()


En Swift 2.2, use

self.edgesForExtendedLayout = .None


Pruebe navigationBar.translucent = NO; , Es YES por defecto en iOS7.

También es bueno echar un vistazo a esta parte de la documentación de UINavigationBar :

Nuevo comportamiento en iOS 7. El valor predeterminado es SÍ. Puede forzar un fondo opaco estableciendo la propiedad en NO. Si la barra de navegación tiene una imagen de fondo personalizada, el valor predeterminado se deduce de los valores alfa de la imagen: SÍ si tiene cualquier píxel con alfa <1.0. Si envía setTranslucent: YES a una barra con una imagen de fondo personalizada opaca, se aplicará una opacidad del sistema menor que 1.0 a la imagen. Si envía setTranslucent: NO a una barra con una imagen de fondo translúcida personalizada, proporcionará un fondo opaco para la imagen usando barTintColor si está definido, o negro para UIBarStyleBlack o blanco para UIBarStyleDefault si barTintColor es nil.

Editar :

Establecer el valor ''navigationBar.translucent'' causa una excepción si ejecuta un proyecto en dispositivos / simuladores que tengan versiones anteriores de iOS.

Entonces puede agregar una verificación de versión como esta:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue]; if (systemVersion >= 7.0) { navigationBar.translucent = NO; }

Otra opción sería establecer:

vc.edgesForExtendedLayout = UIRectEdgeNone;

Swift 3 :

vc.edgesForExtendedLayout = []