color bar ios objective-c uinavigationcontroller uinavigationbar ios10

ios - bar - navigation controller programmatically swift



iOS 10 Beta hace que los botones de la barra de navegación y el título desaparezcan en pushViewController (7)

en realidad, acabo de descubrirlo hace un minuto. Estoy utilizando un GKFadeNavigationController personalizado desde github.com/gklka/GKFadeNavigationControllerDespués de eliminarlo, eso soluciona el problema.

EDIT: mire el video de mi problema aquí: https://www.dropbox.com/sh/lzgs9mahx5mea13/AADLYfLQix7MDleDN1ER81qVa?dl=0

He tenido una aplicación en vivo en la tienda de aplicaciones que funciona perfectamente bien en iOS 9.

Sin embargo, en iOS 10 (probado en el dispositivo iPhone 6s con la última versión beta), cuando se selecciona la celda en el controlador de vista maestra y se "presiona" la vista de detalles, desaparecen los botones de título y navegación de la barra de navegación.

Solo el botón Atrás es visible.

Incluso si regreso al maestro haciendo clic en el botón Atrás o deslizando hacia atrás, no vuelven. Después de regresar, incluso el título del "maestro" y los botones de la barra se han ido. No tengo ni idea de cómo solucionar esto ya que no hay errores.

EN mi código, no escondo la barra de navegación en ningún lado ni hago nada elegante con el controlador de navegación.

Capturas de pantalla del insprector de jerarquía de vista:

Observe cómo el título y la barra derecha se encienden detrás de algunas otras vistas. el botón de retroceso está en la parte delantera. Esto muestra que los botones y el título no están ocultos, están cubiertos por 3 vistas adicionales: UIVisualEffectView, _UIVisualEffectBackdropView y _UIVisualEffectFilterView

También en el video, notarás que si hago un medio desliz hacia atrás, luego cancelo el deslizamiento, los botones de la barra vuelven. Pero el título no.

Después de volver al maestro, observe que las cosas de la barra de navegación del maestro están superpuestas con otras 2 vistas de clases privadas:

Presiono al detalle programáticamente: Código relevante:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ [self.tableView deselectRowAtIndexPath:indexPath animated:YES]; PlaylistDetailViewController *pdvc = (PlaylistDetailViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"PlaylistDetailViewController"]; pdvc.indexPath=indexPath; [self.navigationController pushViewController:pdvc animated:YES]; }


Me encontré con este mismo problema, pero fue causado por el uso de una UINavigationBar personalizada que estaba agregando una vista borrosa. Parece que algo ha cambiado con iOS10 que al agregar un título o botones a la barra de navegación se agregan a un índice específico en lugar de agregarse a la pila de subvista.

Pude superar este problema anulando el método insertSubview:atIndex y asegurándome de que el blurView siempre estaba insertado en la parte posterior de la pila de subvista.


Estaba teniendo el mismo problema que enfrenta ahora. Hay algunos cambios que hice en mi código y su funcionamiento. En mi opinión, viewWillAppear escribe un código de navegación en dispatch_async

dispatch_async(dispatch_get_main_queue(), ^{ //BACK BUTTON CALLING //NAVIGATION TITLE }); [super viewWillAppear:animated];

Esto te ayudará a configurar tu título y botón de retroceso con la ayuda de la cola principal.


El mismo problema se aplica si está utilizando la biblioteca LTNavigationBar ( https://github.com/ltebean/LTNavigationBar )

La solución para mí fue cambiar el código en UINavigationBar + Awesome.m:

Replace [[self.subviews firstObject] insertSubview:self.overlay atIndex:0]; with [[self.subviews firstObject] insertSubview:self.overlay atIndex:self.subviews.count -1];


Encontré una solución para mi trabajo. Cree una vista (viewBackground) con todas las imágenes y colores que conforman la barra de navegación y luego conviértala en una imagen y úsela como fondo.

UIGraphicsBeginImageContextWithOptions(viewBackground.bounds.size, viewBackground.opaque, 0.0); [viewBackground.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage * img = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext(); [[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault]; [self.navigationController.navigationBar setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];


También encontré este problema, y ​​todas las soluciones sugeridas hasta ahora son:

  1. demasiado complicado
  2. no funciona

Al final descubrí que esto fue causado por el ciclo de extracción actualizado para UINavigationBar en iOS10.

Para evitar esto, tuve que arreglarlo con:

self.navigationController.navigationBarHidden = YES; self.navigationController.navigationBarHidden = NO;

Básicamente, acciona la barra de navegación para volver a dibujar.

Todavía es molesto cómo pueden lanzar una nueva versión del sistema operativo que rompe algo tan importante.


Solución de Swift 3.0 para esto:

Subclase UINavigationBar y anular insertSubview (_ view: UIView, en el índice: Int)

override func insertSubview(_ view: UIView, at index: Int) { if let _ = view as? UIVisualEffectView { super.insertSubview(view, at: 0) } else { super.insertSubview(view, at: self.subviews.count - 1) } }