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)