En la nueva aplicación para iPhone iOS7 de Facebook, cuando el usuario se desplaza hacia arriba, navigationBar
se oculta gradualmente hasta el punto en que desaparece por completo. Luego, cuando el usuario se desplaza hacia abajo, navigationBar
se muestra gradualmente.
¿Cómo implementaría usted mismo este comportamiento? Soy consciente de la siguiente solución, pero desaparece de inmediato y no está vinculada a la velocidad del gesto de desplazamiento del usuario.
[navigationController setNavigationBarHidden: YES animated:YES];
Espero que esto no sea un duplicado ya que no estoy seguro de cómo describir mejor el comportamiento de "expansión / contracción".
ios
iphone
objective-c
ios7
uinavigationbar
El Mocoso
fuente
fuente
Respuestas:
La solución dada por @peerless es un gran comienzo, pero solo inicia una animación cada vez que comienza el arrastre, sin considerar la velocidad del desplazamiento. Esto da como resultado una experiencia más agitada que la que obtienes en la aplicación de Facebook. Para que coincida con el comportamiento de Facebook, necesitamos:
Primero, necesitará la siguiente propiedad:
Y aquí están los
UIScrollViewDelegate
métodos:También necesitará estos métodos de ayuda:
Para un comportamiento ligeramente diferente, reemplace la línea que reubica la barra al desplazarse (el
else
bloque hacia adentroscrollViewDidScroll
) con esta:Esto posiciona la barra en función del último porcentaje de desplazamiento, en lugar de una cantidad absoluta, lo que resulta en un desvanecimiento más lento. El comportamiento original es más parecido a Facebook, pero también me gusta este.
Nota: Esta solución es solo para iOS 7+. Asegúrese de agregar las comprobaciones necesarias si admite versiones anteriores de iOS.
fuente
customView
.ScrollView
'scontentSize
es más pequeño que el cuadro, la animación de deslizamiento no funciona. También asegúrese de restablecer todos los elementos alfa de navegación nuevamente a 1.0 pulgviewDidDisappear
.EDITAR: solo para iOS 8 y superior.
Puedes intentar usar
Funciona para mi.
Si su codificación es rápida, debe usarla de esta manera (desde https://stackoverflow.com/a/27662702/2283308 )
fuente
Aquí hay una implementación más: ¡ TLYShyNavBar v1.0.0 lanzado!
Decidí hacer el mío después de probar las soluciones proporcionadas, y para mí, o estaban funcionando mal, tenían una alta barrera de entrada y un código de placa de caldera, o carecían de la vista de extensión debajo de la barra de navegación. Para usar este componente, todo lo que tiene que hacer es:
Ah, y está probado en batalla en nuestra propia aplicación.
fuente
extendedLayoutIncludesOpaqueBars
estaba configuradoYES
en miUICollectionViewController
Puedes echar un vistazo a mi GTScrollNavigationBar . He subclasificado UINavigationBar para que se desplace según el desplazamiento de un UIScrollView.
Nota: Si tiene una barra de navegación OPAQUE, la vista de desplazamiento debe EXPANDIRSE a medida que la barra de navegación se OCULTA. Esto es exactamente lo que hace GTScrollNavigationBar. (Al igual que en Safari, por ejemplo, en iOS).
fuente
iOS8 incluye propiedades para ocultar la barra de navegación de forma gratuita. Hay un video de WWDC que lo demuestra, busque "Ver avances del controlador en iOS 8".
Ejemplo :
}
Otras propiedades:
Encontrado a través de http://natashatherobot.com/navigation-bar-interactions-ios8/
fuente
Tengo algún tipo de solución rápida y sucia para eso. No he realizado ninguna prueba en profundidad, pero esta es la idea:
Esa propiedad mantendrá todos los elementos en la barra de navegación para mi clase UITableViewController
En la misma clase UITableViewController tengo:
Eso es solo para ios> = 7, es feo, lo sé, pero es una forma rápida de lograrlo. Cualquier comentario / sugerencia es bienvenida :)
fuente
Esto funciona para iOS 8 y superior y asegura que la barra de estado aún conserva su fondo
Y si desea mostrar la barra de navegación cuando toca la barra de estado, puede hacer esto:
fuente
Aquí está mi implementación: SherginScrollableNavigationBar .
En mi enfoque, estoy usando
KVO
para observarUIScrollView
el estado, por lo que no hay necesidad de usar un delegado (y puede usar este delegado para cualquier otra cosa que necesite).fuente
Por favor, pruebe esta solución mía y hágame saber por qué esto no es tan bueno como las respuestas anteriores.
fuente
Una forma de lograr esto es la siguiente.
Registre su controlador de vista para que sea el
UIScrollViewDelegate
suyo,UITableView
por ejemplo.Desde dentro de los
UIScrollViewDelegate
métodos, puede obtener el nuevo contentOffset y traducirloUINavigationBar
hacia arriba o hacia abajo en consecuencia.La configuración alfa de las subvistas también se puede hacer en función de algunos valores de umbral y factores que puede establecer y calcular.
¡Espero eso ayude!
fuente
Además de la respuesta de Iwburk, agregué lo siguiente para solucionar el problema alfa en las barras de navegación no personalizadas y restablecer la barra de navegación en el método viewWillDisappear:
fuente
Estaba buscando una solución que permitiera cualquier estilo y comportamiento. Notarás que el comportamiento de condensación de barras es diferente en muchas aplicaciones diferentes. Y, por supuesto, el aspecto de la barra es totalmente diferente entre las aplicaciones.
Creé una solución para este problema con https://github.com/bryankeller/BLKFlexibleHeightBar/
Puede definir sus propias reglas de comportamiento para controlar cómo y cuándo la barra se encoge y crece, y puede definir exactamente cómo desea que las subvistas de la barra reaccionen a la barra que se condensa o crece.
Eche un vistazo a mi proyecto si desea mucha flexibilidad para crear cualquier tipo de barra de encabezado que pueda imaginar.
fuente
Estaba tratando de emular este comportamiento en una situación en la que necesitaba un encabezado personalizado sobre un UITableView. Hice rodar mi propia barra de "navegación" porque se encuentra debajo de un montón de otras cosas en la página y quería que los encabezados de sección siguieran el comportamiento predeterminado de "acoplamiento". Creo que encontré una forma bastante inteligente y sucinta de ajustar un UITableView / UIScrollView junto con otro objeto en un estilo similar al que se ve en Facebook / Instagram / Chrome / etc. aplicaciones
En mi archivo .xib, tengo mis componentes cargados en una vista de forma libre: http://imgur.com/0z9yebJ (lo siento, no tengo el representante de las imágenes en línea)
Observe que, en la barra lateral izquierda, la tabla está ordenada detrás de la vista del encabezado principal. No se puede ver en la captura de pantalla, pero también tiene la misma posición y que la vista del encabezado principal. Como se extiende fuera de la vista, la propiedad contentInset en UITableView se establece en 76 (la altura de la vista del encabezado principal).
Para hacer que la vista del encabezado principal se deslice hacia arriba al unísono con UIScrollView, utilizo los métodos scrollViewDidScroll de UIScrollViewDelegate para realizar algunos cálculos y cambiar el contentInset de UIScrollView, así como el marco de la vista del encabezado principal.
La primera instrucción if hace la mayor parte del trabajo pesado, pero tuve que incluir las otras dos para manejar situaciones en las que el usuario arrastra con fuerza y los valores iniciales de contentOffset enviados a scrollViewDidScroll están fuera del rango de la primera instrucción if .
En definitiva, esto está funcionando muy bien para mí. Odio cargar mis proyectos con un montón de subclases hinchadas. No puedo decir si esta es la mejor solución en términos de rendimiento (siempre he dudado en poner cualquier código en scrollViewDidScroll desde que se llama todo el tiempo), pero la huella del código es la más pequeña que he visto en cualquier solución para este problema y no implica anidar un UITableView en un UIScrollView (Apple desaconseja esto en la documentación y los eventos táctiles terminan siendo un poco raros en el UITableView). ¡Espero que esto ayude a alguien!
fuente
HidingNavigationBar es un gran proyecto que oculta la barra de navegación y la barra de pestañas si lo desea.
https://github.com/tristanhimmelman/HidingNavigationBar
fuente
Intenté implementar GTScrollNavigationBar pero mi aplicación me exigió que modificara las restricciones de diseño automático. Decidí poner un ejemplo de mi implementación en GitHub en caso de que alguien más tenga que hacer esto con el diseño automático. El otro problema que tuve con la mayoría de las otras implementaciones es que las personas no establecen los límites de la vista de desplazamiento para evitar el efecto de desplazamiento de paralaje que crea mientras se desplaza y ajusta el tamaño de la vista de desplazamiento simultáneamente.
Eche un vistazo a JSCollapsingNavBarViewController si necesita hacer esto con el diseño automático. He incluido dos versiones, una solo con la barra de navegación y otra con una subbarra debajo de la barra de navegación que se contrae antes de colapsar la barra de navegación.
fuente
Lo intenté de esta manera, espero que ayude. simplemente implemente el código en el método delegado y configúrelo en la vista / subvista deseada
fuente
Una extensión de la respuesta de @Iwburk ... En lugar de cambiar el origen de la barra de navegación, necesitaba expandir / reducir el tamaño de la barra de navegación.
Todavía no funciona con el
stoppedScrolling
método, publicaré una actualización cuando la tengafuente
Todos estos enfoques parecen demasiado complicados ... Así que, naturalmente, construí el mío:
fuente
frame
propiedad?Encontré todas las respuestas dadas en Objective-C. Esta es mi respuesta en Swift 3. Este es un código muy genérico y puede usarse directamente. Funciona tanto con UIScrollView como con UITableView.
La lógica de configurar alfa a elementos de navegación se copia de la respuesta @ WayneBurkett y se reescribe en Swift 3.
fuente