Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

761
Vistas
Barra de navegación de iOS 15 transparente

Mi aplicación iOS usa el guión gráfico para la interfaz de usuario y usa un tono personalizado para el color de fondo de la barra de navegación.

He probado mi aplicación en Xcode 13 beta 5 y la barra de navegación es "blanca" y el texto de la barra de navegación no está visible.

En el foro de desarrolladores de Apple en https://developer.apple.com/forums/thread/682420 se afirma que "En iOS 15, UIKit ha extendido el uso de scrollEdgeAppearance, que por defecto produce un fondo transparente, a todas las barras de navegación ." Para restaurar la apariencia anterior, debe adoptar las nuevas API de apariencia de UINavigationBar

Agregué el siguiente código (del enlace anterior) a la "aplicación (_ aplicación: UIApplication, didFinishLaunchingWithOptions launchOptions" del delegado de la aplicación):

 if #available(iOS 13, *) { let navigationController = UINavigationController(navigationBarClass: nil, toolbarClass: nil) let navigationBar = navigationController.navigationBar let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = UIColor(red: 0.0/255.0, green: 125/255.0, blue: 0.0/255.0, alpha: 1.0) navigationBar.standardAppearance = appearance; navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance navigationBar.isTranslucent = false }

Esto no soluciona el problema. Todavía tengo el tinte personalizado establecido en el editor de guiones gráficos para la barra de navegación. ¿Necesito eliminar el tinte personalizado o estoy implementando incorrectamente la API de apariencia?

over 4 years ago · Santiago Trujillo
19 Respuestas
Responde la pregunta

0

Si necesitamos cambiar el color de fondo y el color de los elementos seleccionados y no seleccionados, solo este código funcionó en mi caso

he usado esto para cambiar la apariencia del elemento tabBarAppearance.stackedLayoutAppearance = tabBarItemAppearance

 if #available(iOS 15.0, *) { let tabBarAppearance = UITabBarAppearance() let tabBarItemAppearance = UITabBarItemAppearance() tabBarAppearance.backgroundColor = .white tabBarItemAppearance.normal.titleTextAttributes = [NSAttributedString.Key.foregroundColor: Constants.Color.appDefaultBlue] tabBarItemAppearance.selected.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.black] tabBarAppearance.stackedLayoutAppearance = tabBarItemAppearance tabBar.standardAppearance = tabBarAppearance tabBar.scrollEdgeAppearance = tabBarAppearance }

Asegúrese de usar este código en la clase TabBar para obtener los resultados deseados, es posible que no funcione si lo usamos en AppDelegate para configurar la apariencia.

over 4 years ago · Santiago Trujillo Denunciar

0

Este código se puede colocar en cualquier lugar, no solo en el Delegado de la aplicación para solucionar el problema en iOS15:

 if (@available(iOS 15, *)){ UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init]; [appearance configureWithOpaqueBackground]; appearance.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.blackColor}; appearance.backgroundColor = [UIColor colorWithRed:0.0/255.0 green:125/255.0 blue:0.0/255.0 alpha:1.0]; self.navigationController.navigationBar.standardAppearance = appearance; self.navigationController.navigationBar.scrollEdgeAppearance = appearance; }
over 4 years ago · Santiago Trujillo Denunciar

0

Se arregló para mí en el generador de interfaz (xcode 13 - probado para iOS 13 y superior) y no fue necesario verificar la disponibilidad de iOS 15 (es decir, @disponible)

  1. Elija apariencias estándar y de borde de desplazamiento para la barra de navegación.

ingrese la descripción de la imagen aquí

  1. Elija configuraciones similares para ambas apariencias

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Buena suerte

over 4 years ago · Santiago Trujillo Denunciar

0

Edité el código compartido por @Charlie Seligman porque no me funcionó porque tenía una vista de desplazamiento en una de mis pantallas. El siguiente código funciona incluso si tiene una vista de desplazamiento y una barra de navegación.

 if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white] appearance.backgroundColor = UIColor(red: 0.89, green: 0.06, blue: 0.00, alpha: 1.00) UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance }
over 4 years ago · Santiago Trujillo Denunciar

0

Código objetivo c: implemente esto en su función viewDidLoad


 if (@available(iOS 15, *)){ UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init]; [appearance configureWithOpaqueBackground]; appearance.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.blackColor}; appearance.backgroundColor = [UIColor colorWithRed:0.0/255.0 green:125/255.0 blue:0.0/255.0 alpha:1.0]; self.navigationController.navigationBar.standardAppearance = appearance; self.navigationController.navigationBar.scrollEdgeAppearance = appearance; }
over 4 years ago · Santiago Trujillo Denunciar

0

Cualquiera que busque una solución de Objective-C, pruebe el siguiente código:

 if (@available(iOS 15.0, *)) { UINavigationBarAppearance *navBarAppearance = [[UINavigationBarAppearance alloc] init]; [navBarAppearance configureWithOpaqueBackground]; navBarAppearance.backgroundColor = YOUR_COLOR; [navBarAppearance setTitleTextAttributes: @{NSForegroundColorAttributeName:[UIColor whiteColor]}]; self.navigationController.navigationBar.standardAppearance = navBarAppearance; self.navigationController.navigationBar.scrollEdgeAppearance = navBarAppearance; }
over 4 years ago · Santiago Trujillo Denunciar

0

Xcode 13+

En iOS 15, UIKit ha extendido el uso de scrollEdgeAppearance , que por defecto produce un fondo transparente, a todas las barras de navegación. El fondo se controla cuando la vista de desplazamiento desplaza el contenido detrás de la barra de navegación.

Para restaurar la apariencia anterior, debe adoptar las nuevas API de apariencia de UINavigationBar, UINavigationBarAppearance . Elimine sus personalizaciones existentes y haga algo como esto:

 let appearance = UINavigationBarAppearance() appearance.backgroundColor = <your tint color> navigationBar.standardAppearance = appearance navigationBar.scrollEdgeAppearance = appearance

También puede usar el proxy de apariencia con el código anterior, pero sustituyendo navigationBar.appearance().scrollEdgeAppearance = appearance en la última línea.

over 4 years ago · Santiago Trujillo Denunciar

0

En AppDelegate.swift

ventana?.backgroundColor = .blanco

funcionó en mi caso

over 4 years ago · Santiago Trujillo Denunciar

0

Para hacer esto solo con el guión gráfico, para construir sobre la respuesta de @Atka,

puede configurar atributos de texto de título personalizados al optar por atributos de título "Personalizados"

Atributos de título de borde de desplazamiento

over 4 years ago · Santiago Trujillo Denunciar

0

Probé varias formas, pero el siguiente código funcionó como Magic para restaurar la versión anterior.

 if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = .white UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance }
over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una versión si desea configurar un botón Atrás personalizado sin título y barra de navegación transparente

 let backImg: UIImage = #imageLiteral(resourceName: "back") if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.titleTextAttributes = [.foregroundColor: UIColor.black] appearance.setBackIndicatorImage(backImg, transitionMaskImage: backImg) appearance.backButtonAppearance.normal.titlePositionAdjustment = UIOffset(horizontal: -1000.0, vertical: 0) UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance }
over 4 years ago · Santiago Trujillo Denunciar

0

Mi implementación de la configuración de la barra de navegación como opaca y translúcida para iOS 15 y versiones anteriores:

 extension UINavigationBar { static let defaultBackgroundColor = UIColor.red static let defaultTintColor = UIColor.white func setOpaque() { if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = UINavigationBar.defaultBackgroundColor appearance.titleTextAttributes = [.foregroundColor: UINavigationBar.defaultTintColor] UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance } else { setBackgroundImage(UIImage(), for: UIBarPosition.any, barMetrics: UIBarMetrics.defaultPrompt) shadowImage = UIImage() barTintColor = UINavigationBar.defaultBackgroundColor titleTextAttributes = [.foregroundColor: UINavigationBar.defaultTintColor] } isTranslucent = false tintColor = UINavigationBar.defaultTintColor } func setTranslucent(tintColor: UIColor, titleColor: UIColor) { if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithTransparentBackground() appearance.titleTextAttributes = [.foregroundColor: titleColor] standardAppearance = appearance scrollEdgeAppearance = appearance } else { titleTextAttributes = [.foregroundColor: titleColor] setBackgroundImage(UIImage(), for: UIBarMetrics.default) shadowImage = UIImage() } isTranslucent = true self.tintColor = tintColor }

}

over 4 years ago · Santiago Trujillo Denunciar

0

En mi caso, cuando actualizo a xcode13 e iOS15, descubrí que la barra de navegación y la barra de pestañas se vuelven transparentes. Mi viewController está incrustado en UINavigationController.

ingrese la descripción de la imagen aquí

Después de una serie de pruebas, encontré que la configuración, el color de fondo del controlador de navegación, es la mejor manera de solucionar este problema.

 navigationController?.view.backgroundColor = .yourColor

Una vez que se establece el color, todo está bien.

ingrese la descripción de la imagen aquí

over 4 years ago · Santiago Trujillo Denunciar

0

Hazlo así:

 let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = .red appearance.titleTextAttributes = [.font: UIFont.boldSystemFont(ofSize: 20.0), .foregroundColor: UIColor.white] // Customizing our navigation bar navigationController?.navigationBar.tintColor = .white navigationController?.navigationBar.standardAppearance = appearance navigationController?.navigationBar.scrollEdgeAppearance = appearance

Escribí un nuevo artículo hablando de eso.

https://medium.com/@eduardosanti/uinavigationbar-is-black-on-ios-15-44e7852ea6f7

over 4 years ago · Santiago Trujillo Denunciar

0

Creé esta extensión para admitir iOS 15 e iOS 12 para cambiar el fondo de la barra de navegación (tinte) y los colores del título solo en los lugares necesarios, no en toda la aplicación.

 extension UINavigationBar { func update(backroundColor: UIColor? = nil, titleColor: UIColor? = nil) { if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() if let backroundColor = backroundColor { appearance.backgroundColor = backroundColor } if let titleColor = titleColor { appearance.titleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor] } standardAppearance = appearance scrollEdgeAppearance = appearance } else { barStyle = .blackTranslucent if let backroundColor = backroundColor { barTintColor = backroundColor } if let titleColor = titleColor { titleTextAttributes = [NSAttributedString.Key.foregroundColor: titleColor] } } } }

y utilícelo en los lugares necesarios (en mi caso, es la configuración de la interfaz de usuario de UIViewController) como este

 func configureNavigationController() { navigationController?.navigationBar.update(backroundColor: .blue, titleColor: .white) }
over 4 years ago · Santiago Trujillo Denunciar

0

Si alguien necesita la versión Objective C de la respuesta de G. Steve

 if (@available(iOS 15, *)){ UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init]; [appearance configureWithOpaqueBackground]; appearance.titleTextAttributes = @{NSForegroundColorAttributeName : UIColor.whiteColor}; appearance.backgroundColor = [UIColor colorWithRed:0.0/255.0 green:125/255.0 blue:0.0/255.0 alpha:1.0]; [UINavigationBar appearance].standardAppearance = appearance; [UINavigationBar appearance].scrollEdgeAppearance = appearance; }
over 4 years ago · Santiago Trujillo Denunciar

0

Este código se puede colocar en cualquier lugar, no solo en el Delegado de la aplicación para solucionar el problema en iOS15:

 if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.backgroundColor = <desired UIColor> navigationBar.standardAppearance = appearance; navigationBar.scrollEdgeAppearance = navigationBar.standardAppearance }
over 4 years ago · Santiago Trujillo Denunciar

0

No hay necesidad de cambiar nada en el guión gráfico. Esta es la solución que finalmente funcionó cuando se agregó a la aplicación App Delegate application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions :

 //Fix Nav Bar tint issue in iOS 15.0 or later - is transparent w/o code below if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() appearance.titleTextAttributes = [.foregroundColor: UIColor.white] appearance.backgroundColor = UIColor(red: 0.0/255.0, green: 125/255.0, blue: 0.0/255.0, alpha: 1.0) UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance }

Tenga en cuenta que era necesario establecer el atributo de texto del título en "blanco" ya que el texto del título predeterminado era negro si no se especificaba este atributo.

También tenga en cuenta que esto solo debería aplicarse a la versión de iOS 15.0 o posterior. No funciona para versiones anteriores, ya que el tono personalizado de la barra de navegación del guión gráfico es el comportamiento predeterminado.

over 4 years ago · Santiago Trujillo Denunciar

0

Para usar su propio esquema de color, use lo siguiente:

Rápido

 // White non-transucent navigatio bar, supports dark appearance if #available(iOS 15, *) { let appearance = UINavigationBarAppearance() appearance.configureWithOpaqueBackground() UINavigationBar.appearance().standardAppearance = appearance UINavigationBar.appearance().scrollEdgeAppearance = appearance }

C objetivo

 if (@available(iOS 15.0, *)) { UINavigationBarAppearance *navBarAppearance = [[UINavigationBarAppearance alloc] init]; navBarAppearance.backgroundColor = [UIColor redColor]; [navBarAppearance configureWithOpaqueBackground]; [UINavigationBar appearance].standardAppearance = navBarAppearance; [UINavigationBar appearance].scrollEdgeAppearance = navBarAppearance; }

Para obtener el comportamiento translúcido predeterminado, como era el predeterminado antes de iOS 15, simplemente configure scrollEdgeAppearance :

Rápido

 if #available(iOS 15, *) { UINavigationBar.appearance().scrollEdgeAppearance = UINavigationBarAppearance() }

C objetivo

 if (@available(iOS 15.0, *)) { [UINavigationBar appearance].scrollEdgeAppearance = [[UINavigationBarAppearance alloc] init]; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda