iOS - Personnaliser la barre de navigation pour certains UIViewController uniquement

2020-08-01 ios swift uinavigationcontroller uinavigationbar uiappearance

Je dois ajouter de nouveaux écrans à une application existante, qui utilisera un style de barre de navigation différent de celui qui existe déjà et sera accessible à partir de différents écrans. L'idée serait d'afficher le nouveau style de barre de navigation uniquement pour ces écrans, donc lorsque l'utilisateur termine ce flux ou revient à l'écran qui a commencé la navigation, il devrait afficher à nouveau le style de barre de navigation qu'il utilisait précédemment.

J'ai essayé 2 choses mais je n'ai pas fonctionné comme prévu:

  1. J'ai pensé à envelopper les nouveaux écrans dans un nouveau UINavigationController , afin que je puisse changer son style de barre de navigation et ce serait cohérent pour les nouveaux écrans. Cela fonctionne mais le problème est que je ne suis pas en mesure de personnaliser la transition UINavigationController initiale pour qu'elle ne ressemble pas à un modal (c'est-à-dire que je veux montrer que UINavigationController avec la même animation que si je UIViewController un UIViewController ). Y-a-t-il un moyen de faire ça? Au fait, je gère les navigations avec des storyboards.

  2. J'ai aussi pensé à utiliser

self.navigationController?.navigationBar.isHidden = true

Mais cela ne semble pas propre car je devrais le montrer à nouveau lorsque le flux est terminé (c'est un peu long) ou annulé. Cela fait beaucoup de combinaisons et il serait facile d'en rater une, donc cela ne semble pas une solution pratique. Y a-t-il une meilleure manière de faire cela?

Answers

Le presenting view controller est l'endroit où vous souhaitez modifier la barre de navigation du contrôleur à présenter. Vous devez donc apporter des modifications à la barre de navigation juste avant d'appeler push(viewController:animated:) .

Et puis dans viewWillAppear toujours le presenting view controller vous réinitialiserez la barre de navigation à ce qu'elle était initialement.

REMARQUE: gardez à l'esprit qu'en fonction du type de modifications que vous apportez à la barre de navigation, la transition peut ne plus être fluide. L'utilisateur peut voir une sorte de scintillement sur la barre de navigation, ce qui serait une mauvaise interface utilisateur / UX.

Edit: une autre alternative

Vous pouvez également vous débarrasser de la barre de navigation et implémenter à la place votre propre header view que vous pouvez styliser comme vous le souhaitez, pour représenter la barre de navigation.

  • Vous pouvez le styliser comme une simple barre de navigation avec un titre + bouton de retour.
  • Vous pouvez le styliser pour qu'il ressemble à une barre de navigation avec un grand titre
  • Vous pouvez le styliser comme une barre de navigation avec bouton retour + image d'arrière-plan + titre + boutons de la barre droite

Comme vous pouvez le voir, cette deuxième alternative vous offre plus de liberté dans ce que vous pouvez faire.

Related