La respuesta aceptada funcionó para mí, pero me di cuenta de cuándo quería que reapareciera la imagen de la sombra al aparecer hacia atrás o avanzar hacia otra vc. Hubo un parpadeo notable en la barra de navegación.
Al usar este método navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
en viewWillAppear, la barra de sombra está oculta en el controlador de vista visible actual.
Usando estos 2 métodos
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
en viewWillDisappear el parpadeo todavía ocurre pero solo cuando reaparece la imagen de sombra y no la barra de navegación en sí.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// 1. hide the shadow image in the current view controller you want it hidden in
navigationController?.navigationBar.setValue(true, forKey: "hidesShadow")
navigationController?.navigationBar.layoutIfNeeded()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(true)
// 2. show the shadow image when pushing or popping in the next view controller. Only the shadow image will blink
navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
navigationController?.navigationBar.setValue(false, forKey: "hidesShadow")
navigationController?.navigationBar.layoutIfNeeded()
}