poner - La barra de navegación de título grande de iOS 11 no se está colapsando
iphone (5)
¡Buenas noticias! Acabo de descubrir que si configuro "Grandes títulos" en "Nunca" en el guión gráfico y luego lo configuro mediante código, entonces funciona:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}
Parece que Apple se olvidó de manejar el caso cuando el elemento de navegación tiene su largeTitleDisplayMode
configurado a través del Interface Builder.
Por lo tanto, hasta que arreglen este problema, deje "Grandes títulos" como "Nunca" en los guiones gráficos y viewDidLoad
mediante el código en viewDidLoad
.
Solo tiene que hacer eso al primer controlador de vista. Controladores de vista posteriores respetan el valor en el guión gráfico.
El chico de Apple en el video WWDC What''s new in Cocoa Touch dijo que la nueva barra de navegación de título grande se conectará mágicamente a la vista de desplazamiento de nivel superior del controlador de vista subyacente y se colapsará / expandirá automáticamente mientras se desplaza hacia arriba y hacia abajo. (Y por "mágicamente", probablemente quiso decir que no lograron parchear esta funcionalidad en las ya desconcertantes UINavigationController
- UINavigationBar
- UINavigationitem
de una manera utilizable, por lo que tuvieron que recurrir a engancharse en alguna vista de desplazamiento elegida heurísticamente detrás de las escenas)
Aunque estaba preparado para que este colapso / expansión "automático" no funcionara si me desviara del más mínimo de la UINavigationController
básica de UINavigationController
+ UITableView
/ UICollectionView
, parece que incluso en este caso más simple no funciona como se esperaba.
Esto es lo que tengo:
Un UITabBarController
que contiene un UINavigationController
, que contiene un UIViewController
, que tiene una UITableView
como su view
. Al tocar la primera celda de la tabla, se empujará un segundo controlador de vista en la pila de navegación:
Sin código, solo el guión gráfico.
He marcado "Prefiere títulos grandes" para que la barra de navegación active títulos grandes. Ahora, si ejecuto la aplicación y me desplazo hacia arriba / abajo en la vista de tabla, la barra de navegación permanece igual - de gran tamaño; no colapsa:
Sin embargo, he encontrado que si configuro el elemento de navegación del segundo controlador de vista para usar la barra de navegación pequeña (estableciendo "Título grande" en el valor "Nunca" ), entonces si abro esa página y navego hacia atrás, el colapso interactivo mágicamente comienza a trabajar en la primera página:
¿Me falta algo aquí o esta característica no funciona correctamente? Aquí está el proyecto de muestra que estoy usando: https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar
Y, por cierto, estoy usando el iOS 11 oficialmente lanzado, no las versiones beta.
Actualización de 2017-09-23: He enviado un informe de error a Apple y he abierto un ticket en openradar.me: http://www.openradar.me/radar?id=5017601935671296
@TamasZahola @ mohamede1945
Chicos, tuve el mismo problema. Pude resolver este problema agregando el siguiente fragmento en mi primer Controlador de Vista del Controlador de Navegación
navigationController?.navigationBar.prefersLargeTitles = true
Como no puedo comentar, compartiré aquí la respuesta que publiqué
.com/a/47493375/8385022
Encontré una solución en este sitio básicamente, si el TableView (o elemento que tiene desplazamiento) no es la primera vista en su jerarquía de vista, el título grande no se puede ocultar automáticamente.
Ejemplo que NO funcionará Ejemplo que funcionará
https://markusbodner.com/2017/10/08/fix-large-navigation-bar-title-not-hiding-on-scroll-in-ios-11/
Añadí en la vista aparecerá:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
} else {
// Fallback on earlier versions
}
O en lugar de cambiar algo en el guión gráfico, haz esto:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always
}
}
¡No importa qué idioma!
Esto se debe a que los títulos grandes en el elemento de navegación deciden si colapsar o no sobre la base del comportamiento de título grande en el título de elemento de navegación de pantalla anterior.