El título grande al interruptor de título pequeño en la barra de navegación no es fluido iOS 13, pegajoso

11

Tengo un UINavigationControllervalor predeterminado de es navigationBar.prefersLargeTitles = true.

Estoy cambiando eso a falsecuando entro push en una nueva escena, vamos a llamarlo ( DetailsViewController), cambiándolo a viewWillDisappear.

override func viewWillDisappear(_ animated: Bool) {
   super.viewWillDisappear(animated)
   navigationController?.navigationBar.prefersLargeTitles = false
}

Ahora en DetailsViewControllerque estoy usando willMove(to parent:).

override func willMove(toParent parent: UIViewController?) {
        navigationController?.navigationBar.prefersLargeTitles = true
}

Para volver a la transición a títulos grandes.

Observe las instantáneas adjuntas de cómo lo hace iOS 13 con cómo lo hace iOS 12 , teniendo en cuenta que iOS 12 es el comportamiento correcto.

iOS 13 :

iOS 13

iOS 12 :

iOS 12

Mohmmad S
fuente
No tiene que cambiar .prefersLargeTitlespara nada cuando empuja un controlador de vista detallada a la pila de navegación, usará automáticamente un título pequeño y luego volverá al grande una vez que regrese al controlador de vista raíz, que yo sepa
henrik-dmg
@ henrik-dmg No estoy seguro si fue así antes, pero ya no todo va a un título grande si lo hice, lo he intentado.
Mohmmad S
1
largeTitleDisplayModea . automaticy deberías obtener la transición deseada.
Harry J
@HarryJ ¿dónde?
Mohmmad S
Dentro de su viewDidLoad o controlador de navegación,navigationController?.navigationItem.largeTitleDisplayMode = .automatic
Harry J

Respuestas:

21

Lo que estás haciendo siempre estuvo mal. Se debe ajustar prefersLargeTitlesa la truevez para la barra de navegación y nunca volver a tocar.

La forma de cambiar lo que hace cada controlador de vista sobre títulos grandes como parece es que ese controlador de vista establece su propio navigationItem(en su viewDidLoad) para tener el deseado largeTitleDisplayMode. Entonces, si el primer vc tiene .alwaysy el segundo tiene .nevertodo, será suave.

mate
fuente
¡Qué buena respuesta! ¡Nunca supe que esa era la forma de tener títulos grandes y pequeños al mismo tiempo!
Kacper Cz
0

Tuve el mismo problema y tuve que colocar un NavigationItem en el segundo guión gráfico de ViewController. Mi NavigationItem estaba siendo creado automáticamente por el segue y su prefersLargeTitleen el viewDidLoad()que no se terminó de crear antes de la vista apareció. Agregar un elemento de navegación al guión gráfico solucionó este problema y me permitió configurarlo prefersLargeTitleen el menú de propiedades del guión gráfico.

Ben Hardin
fuente
0

En mi caso, este problema estaba ocurriendo durante un segue a un controlador de vista que es hijo de un UITabBarController. Establecer largeTitleDisplayModeel controlador de vista secundario no fue suficiente para corregir este error.

He resuelto el problema agregando un elemento de navegación a la escena UITabBarController y configurando largeTitleDisplayModecomo .neverallí.

Teo
fuente