transparente navegación navegacion barra ios uitableview uinavigationbar

ios - navegacion - Barra de navegación de UIN que cambia la transparencia al desplazarse



barra de navegacion transparente huawei (2)

Suponiendo que tiene una referencia a la vista sobre la vista de tabla y que no desea interactuar nada en ella:

var overlayView:UIView! var offsetDenominator:CGFloat! let TARGER_COLOR = UIColor.blackColor() override func viewDidLoad() { super.viewDidLoad() if let navCtrl = self.navigationController { self.offsetDenominator = headerView.frame.size.height - navCtrl.navigationBar.frame.height let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor) let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: 0.0) self.overlayView = UIView(frame: self.headerView.frame) self.overlayView.backgroundColor = overlayColor self.view.addSubview(self.overlayView) } ... override func scrollViewDidScroll(scrollView: UIScrollView) { if let navCtrl = self.navigationController, let breakpoint = offsetDenominator { let alpha = scrollView.contentOffset.y / breakpoint if alpha >= 1.0 { navCtrl.navigationBar.backgroundColor = self.TARGER_COLOR } else { let targetCIColor = CIColor(CGColor: self.TARGER_COLOR.CGColor) let overlayColor = UIColor(red: targetCIColor.red, green: targetCIColor.green, blue: targetCIColor.blue, alpha: alpha) self.overlayView.backgroundColor = overlayColor navCtrl.navigationBar.backgroundColor = UIColor.clearColor() } } }

Estoy intentando implementar UINavigationBar que cambia su transparencia al desplazar UITableView . Al principio, la barra de navegación debería tener un fondo transparente, por lo que el contenido debajo debería estar visible (se mostrará una imagen, por ejemplo, estoy usando un color sólido):

Cuando el usuario desplaza la vista de tabla, la transparencia debe reemplazarse con un color sólido:

La vista de tabla contendrá encabezados de sección, que deberían actuar como cuando se usa una barra de navegación no translúcida. Las vistas del encabezado deben "pegarse" a la barra de navegación una vez que "la toquen" desde la parte inferior:

No tengo suerte con intentar implementar este flujo en la aplicación iOS.

Para el estado inicial, estoy configurando la propiedad translucent UINavigationBar en YES , y tanto backgroundColor como barTintColor en clear clear, lo que me da lo que quiero.

Luego, cuando el usuario desplaza la vista de tabla, estoy actualizando el color de backgroundColor y el barTintColor de la barTintColor de barTintColor a un color con un componente alfa determinado, calculado en base al desplazamiento de desplazamiento actual. Estoy usando scrollViewDidScroll: del protocolo UIScrollViewDelegate para hacerlo. Sin embargo, solo cambia el fondo de la barra de navegación, dejando el fondo transparente de la barra de estado, que no es lo que quiero.

No puedo encontrar otra forma de hacer que UINavigationBar transparente sin establecer la propiedad translucent en YES . Desafortunadamente, esto cambia la forma en que actúan los encabezados de sección al desplazarse. Como la barra de navegación es translúcida, las vistas del encabezado de la sección se ocultan debajo de ella cuando deberían "pegarse" a la barra como en la tercera captura de pantalla de arriba.

Agradecería cualquier ayuda y sugerencias sobre cómo lograr la barra de navegación que funcione como se describe o similar en Objective-C o Swift.


Swift3

var navAlpha = // Your appropriate calculation self.navigationController!.navigationBar.backgroundColor = UIColor.red.withAlphaComponent(navAlpha)