Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

764
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

0

En AppDelegate.swift

ventana?.backgroundColor = .blanco

funcionó en mi caso

over 4 years ago · Santiago Trujillo Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda