ios iphone uinavigationbar ios10 imessage

ios - Barra de navegación más alta/estándar similar a los mensajes durante el push/pop



iphone uinavigationbar (1)

La barra de navegación de la aplicación iOS 10 Messages aumenta / disminuye la altura al empujar / abrir una conversación (con una transición suave).

Por lo general, hago una barra de navegación personalizada más alta utilizando sizeThatFits: pero persiste en los sizeThatFits: y sizeThatFits: emergentes en un controlador de navegación.

¿Cómo es posible tener una barra de navegación más alta solo para algunos controladores de vista en secuencias de navegación como la aplicación de Mensajes? ¡Gracias!


Problema muy interesante. Pasé algo de tiempo para lograr algo como esto en la aplicación de Mensajes y eso es lo que he hecho.

Finalmente, utilizo este truco para animar la altura de la barra de navegación durante el empuje / pop y también el pop con el gesto de deslizar.

UIView.beginAnimations(nil, context: nil) self.frame = navFrame UIView.commitAnimations()

A continuación puedes ver mi implementación:

extension UINavigationBar { func applyHeight(_ height: CGFloat, animated: Bool = true) { var navFrame = self.frame navFrame.size.height = height if animated { UIView.beginAnimations(nil, context: nil) self.frame = navFrame UIView.commitAnimations() } else { self.frame = navFrame } } } class ViewControllerA: UIViewController { override func loadView() { super.loadView() title = "A" view.backgroundColor = .blue navigationItem.rightBarButtonItem = UIBarButtonItem(title: "NEXT", style: .plain, target: self, action: #selector(self.showController)) navigationController?.navigationBar.isTranslucent = false } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) } func showController() { navigationController?.pushViewController(ViewControllerB(), animated: true) } } class ViewControllerB: UIViewController { override func loadView() { super.loadView() title = "B" view.backgroundColor = .red } override func viewWillAppear(_ animated: Bool) { navigationController?.navigationBar.applyHeight(100) super.viewWillAppear(animated) } override func willMove(toParentViewController parent: UIViewController?) { if parent == nil { // here you know that back button was tapped navigationController?.navigationBar.applyHeight(44) } super.willMove(toParentViewController: parent) } }

Cosas para mejorar

  • El título salta hacia arriba

El título de salto es visible mientras pasas al pop, pero personalmente, creo que este es un pequeño problema :)

Espero que te ayude, y tal vez alguien pueda mejorar esta implementación. Por supuesto, todavía intentaré descubrir cómo mejorar esto :) Aquí es un repositorio de github . Por favor, use la navigation_bar_height barra de navigation_bar_height .