2 votes

iOS - La barre de navigation n'affiche pas les grands titres lorsque l'orientation est modifiée

J'ai installé largeTitle sur ma barre de navigation, qui s'affiche correctement.

Lorsque je change l'orientation de mon appareil en paysage puis en portrait, il devient normal au lieu de largeTitle.

Il s'agit d'un contrôleur de barre d'onglets. Lorsque je change d'onglet (vers le calendrier comme dans le gif ci-dessous), la vue se recharge et s'affiche correctement.

Dans mon contrôleur de barre d'onglets, j'ai ajouté ceci mais cela ne m'aide pas à réajuster largeTitle dans la barre de navigation.

override func viewWillTransition(to size: CGSize, with coordinator: 
  UIViewControllerTransitionCoordinator) {
          if UIDevice.current.orientation.isLandscape {
             //do something
          } else {

  self.navigationController?.navigationBar.prefersLargeTitles = true
              self.navigationItem.largeTitleDisplayMode = .always
          }
      }

Si j'ajoute le code ci-dessus dans mon tabviewcontroller, il n'appelle même pas. Il appelle depuis mon contrôleur tabbar mais il ne met pas à jour les titres en grand.

Je suis frappé ici. S'il vous plaît, dites-moi comment je peux réparer ça.

Merci enter image description here

1voto

Pavel Kozlov Points 751

Vous pouvez réinitialiser la hauteur de votre barre de navigation à celle par défaut en changeant l'orientation de votre appareil (ici, j'ai réinitialisé tout le cadre de la barre de navigation pour plus de simplicité) :

class ViewController: UIViewController {

    lazy var navigationControllerLargeTitleFrame: CGRect = {
        let navigationController = UINavigationController()
        navigationController.navigationBar.prefersLargeTitles = true
        return navigationController.navigationBar.frame
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(orientationDidChangeNotification), name: UIDevice.orientationDidChangeNotification, object: nil)
    }

    @objc func orientationDidChangeNotification(_ notification: NSNotification) {
        if UIDevice.current.orientation == .portrait {
            navigationController?.navigationBar.frame = navigationControllerLargeTitleFrame
        }
    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X