Tengo una aplicación que a veces necesita que su barra de navegación se mezcle con el contenido.
¿Alguien sabe cómo deshacerse o cambiar el color de esta pequeña barra molesta?
En la imagen a continuación la situación que tengo - estoy hablando de esta línea de altura de 1px debajo de "Root View Controller"
ios
objective-c
swift
ipad
uinavigationbar
Szymon Kuczur
fuente
fuente
Respuestas:
Para iOS 13:
Usa la
.shadowColor
propiedadPor ejemplo:
Para iOS 12 y versiones inferiores:
Para hacer esto, debe establecer una imagen de sombra personalizada. Pero para que se muestre la imagen sombreada, también debe establecer una imagen de fondo personalizada, cite la documentación de Apple:
Entonces:
Arriba está la única forma "oficial" de ocultarlo. Desafortunadamente, elimina la translucidez de la barra.
No quiero imagen de fondo, solo color
Tienes esas opciones:
Color sólido, sin translucidez:
Crea una pequeña imagen de fondo llena de color y úsala.
Utilice el método 'hacky' que se describe a continuación. También mantendrá la barra translúcida.
¿Cómo mantener la barra translúcida?
Para mantener la translucidez, necesita otro enfoque, parece un truco pero funciona bien. La sombra que estamos tratando de eliminar es una rayita en
UIImageView
algún lugar debajoUINavigationBar
. Podemos encontrarlo y ocultarlo / mostrarlo cuando sea necesario.Las instrucciones a continuación suponen que necesita una línea oculta solo en un controlador de su
UINavigationController
jerarquía.Declarar variable de instancia:
Agregue un método que encuentre esta sombra (rayita)
UIImageView:
Agregar / editar
viewWillAppear/viewWillDisappear
métodos:El mismo método también debería funcionar para
UISearchBar
rayita y (casi) cualquier otra cosa que necesite ocultar :)¡Muchas gracias a @Leo Natan por la idea original!
fuente
UINavigationBar
propiedad:clipsToBounds = YES
clipsToBounds = YES
funciona como un encanto! ¡Gracias!viewWillAppear
se llama no podemos obtenershadowImageView
¡A continuación puede ayudar simplemente!
Rápido:
C objetivo:
fuente
Si solo desea usar un color de barra de navegación sólido y lo ha configurado en su guión gráfico, use este código en su
AppDelegate
clase para eliminar el borde de 1 píxel a través del proxy de apariencia:fuente
Prueba esto:
La imagen de abajo tiene la explicación (iOS7 NavigationBar):
Y revise esta pregunta SO: iOS7 - Cambiar el color del borde UINavigationBar
fuente
Quería agregar la versión Swift de la respuesta de Serhii. Creé un
UIBarExtension.swift
con lo siguiente:fuente
La forma rápida de hacerlo:
fuente
Solución simple en swift
fuente
Después de estudiar la respuesta de Serhil, creé una vaina UINavigationBar + Addition que puede ocultar fácilmente la línea del cabello.
fuente
En Swift 3.0
Edite su
AppDelegate.swift
agregando el siguiente código a la función de su aplicación:fuente
A partir de iOS 13, hay una API del sistema para establecer o eliminar la sombra
https://developer.apple.com/documentation/uikit/uibarappearance/3198009-shadowimage
fuente
UINavigationBarAppearance
encabezados !! Nunca lo encontraría. Gracias, esto resolvió mis problemas al 100%También se puede ocultar de Storyboard (trabajando en Xcode 10.1)
Al agregar el atributo de tiempo de ejecución: hidesShadow - Boolean - True
fuente
Solución de pxpgraphics actualizada para Swift 2.0
fuente
UINavigationController().navigationBar/toolbar.hide/showBottomHairline()
entonces ¿no? Estoy intentando esto pero fue en vano. ¿No estoy entendiendo correctamente?Swift 4 // para ocultar la línea de sombra de la barra de navegación
fuente
Utilizo una extensión UINavigationBar que me permite ocultar / mostrar esa sombra usando la API UIAppearance o seleccionando qué barra de navegación tiene que ocultar / mostrar esa sombra usando Storyboard (o código fuente). Aquí está la extensión:
Ahora, para deshabilitar la sombra en todas las barras de navegación, debe usar:
O puede habilitar / deshabilitar este comportamiento usando guiones gráficos:
fuente
flatAssociatedObjectKey
como un int único (tratado como puntero) para identificar su objeto asociado. Aquí se define por la dirección de memoria de una var privada. Actualicé la respuesta para agregar esta var. Visite nshipster.com/associated-objects para obtener más información.translucent
en falsoSwift 4 probado SOLUCIÓN DE UNA LÍNEA
En
Viewdidload()
Establecer el valor predeterminado del usuario del controlador de navegación verdadero para la clave "hidesShadow"fuente
Swift puso esto
en
fuente
Otra opción si desea preservar la translucidez y no desea subclasificar todos
UINavigationController
en su aplicación:fuente
fuente
Solución en Swift 4.2:
Simplemente ponga esta función en el primer Viewcontroller y llámelo
viewdidload
fuente
En iOS8, si se establece el
UINavigationBar.barStyle
que.Black
se puede poner el fondo de la barra como el color blanco sin la frontera.En Swift:
fuente
Solución de dos líneas que funciona para mí. Intente agregar esto en el método ViewDidLoad:
fuente
Aquí hay una solución muy simple:
fuente
Solución simple - Swift 5
Crea una extensión:
Agregue esto a
viewDidLoad()
:fuente
Para los usuarios de iOS 9, esto funcionó para mí. solo agrega esto:
fuente
El problema con la configuración de una imagen de fondo es que elimina el desenfoque. Puede eliminarlo sin establecer una imagen de fondo. Mira mi respuesta aquí .
fuente
Debe agregar una vista al final de UISearchBar
fuente
Sé que este es un hilo viejo, pero encontré una solución que funciona muy bien:
Subclase UINavigationBar. En su subclase UINavigationBar, anule didAddSubview con el siguiente código:
fuente
Acabo de crear una extensión para esto ... Perdón por el formato (esta es mi primera respuesta).
Uso:
Extensión:
fuente
Dentro de AppDelegate , esto ha cambiado globalmente el formato de NavBar:
No he logrado implementar nada diferente en un VC específico, pero esto ayudará al 90% de las personas
fuente
fuente