63 votes

Utilisez le titre accru de la barre de navigation dans iOS 11

La version bêta 1 d'iOS 11 utilise le titre accru de la barre de navigation pour presque toutes les applications système (elle a commencé à le faire dans iOS 10 et l'application Musique). Je me demande si Apple a prévu une API publique pour cela dans iOS 11, ou si elle restera privée pour le moment.

Le comportement est le suivant : le titre a une taille de police plus grande, est aligné à gauche et se déplace vers la barre de navigation lorsque l'utilisateur fait défiler la page. J'ai joint quelques écrans montrant ce comportement dans l'application Messages ici :

enter image description here

Bien que je n'aie pas trouvé de référence dans le UINavigationController y UINavigationBar jusqu'à présent, peut-être que quelqu'un connaît d'autres détails !

2 votes

C'est dans la documentation : prefersLargeTitles

0 votes

Les grands titres de la barre de navigation et de la barre d'outils sont disponibles dans iOS 11 et vous pouvez également les utiliser dans vos applications.

0 votes

Il semble que cela doive être fait en code. Le sélecteur de grands titres dans Interface Builder n'a aucun effet.

118voto

Moin Shirazi Points 3539

La seule modification apportée à UINavigationBar L'API pour iOS 11 est prefersLargeTitles .

Documentation ici : https://developer.apple.com/documentation/uikit/uinavigationbar/

Vous pouvez le faire pour vos propres applications avec un petit changement : cochez "Prefers Large Titles" pour votre barre de navigation dans IB, ou si vous préférez le faire en code en utilisant :

navigationController?.navigationBar.prefersLargeTitles = true

Si vous devez modifier les attributs de texte du grand titre, vous devez utiliser le nouvel élément suivant largeTitleTextAttributes la propriété sur UINavigationBar :

UINavigationBar.appearance().largeTitleTextAttributes = [
    NSAttributedString.Key.foregroundColor: UIColor.black
]

0 votes

Je sais que c'est une question complètement différente mais je ne suis pas sûr que cela vaille la peine de poster une nouvelle question. Avez-vous trouvé un moyen de modifier la couleur du texte du grand titre (couleur de premier plan) ?

1 votes

Je pense que c'est toujours un bug .... s'il vous plaît vérifier openradar.me/32658968

0 votes

La propriété permettant de modifier les attributs des grands titres est largeTitleTextAttributes comme répondu ici : stackoverflow.com/a/45020883/106703 . Je suppose que c'est logique pour que les grands titres et les titres réguliers puissent être stylisés indépendamment.

12voto

anon Points 108

UINavigationBar a un prefersLargeTitles: Bool propriété. Docs ici .

class UINavigationBar {
   var prefersLargeTitles: Bool
}

UINavigationItem a un largeTitleDisplayMode: UINavigationItem.LargeTitleDisplayMode propriété. Docs ici .

class UINavigationItem {
   var largeTitleDisplayMode: LargeTitleDisplayMode
}

Ces deux éléments peuvent être modifiés dans l'Interface Builder.

Pour activer ce comportement, définissez navigationController.navigationBar.prefersLargeTitles a true . Vous pouvez ensuite contrôler chaque contrôleur de vue individuel dans la pile de contrôleurs de navigation en définissant les paramètres suivants navigationItem.largeTitleDisplayMode .

Selon les directives générales d'Apple en matière de conception, les grands titres ne doivent pas être utilisés partout (par exemple, l'application Horloge ne les utilise pas), et il est généralement préférable que seul le premier niveau du contrôleur de navigation utilise les grands titres. Il ne s'agit toutefois que de directives générales.

Les grands titres sont introduits dans Quoi de neuf dans la vidéo Cocoa Touch (7:37).

8voto

Maor Points 1266

Il suffit de cocher "Préfère les grands titres" dans l'inspecteur d'attributs de la barre de navigation dans Storyboard / Interface Builder :

enter image description here

7voto

Sai Sandeep Points 81
if #available(iOS 11.0, *) {
    navigationController?.navigationBar.prefersLargeTitles = true
    navigationController?.navigationBar.topItem?.title = "Hello"
    navigationController?.navigationItem.largeTitleDisplayMode = .automatic

    let attributes = [
        NSAttributedStringKey.foregroundColor : UIColor.red,
        ]

    navigationController?.navigationBar.largeTitleTextAttributes = attributes
} else {
    // Fallback on earlier versions
}

6voto

Jordi Bruin Points 1236
if #available(iOS 11.0, *) {
    self.navigationController?.navigationBar.prefersLargeTitles = true
    self.navigationItem.largeTitleDisplayMode = .always
} else {
    // Fallback on earlier versions
}

Notez qu'il y a quelques bogues dans la version bêta 1 qui font que le grand titre n'apparaît que lorsque vous faites défiler manuellement vers le haut.

0 votes

Jordi, j'ai un UICollectionView dans mon UIViewController racine. Lorsque je fais défiler, que je pousse un autre VC et que je reviens au contrôleur racine, la barre de navigation se réduit à la plus petite (même si j'ajoute votre code). S'agit-il du même problème que celui que vous avez décrit ?

0 votes

Bonjour @RoiMulia, cela ressemble à un autre bug. Lorsque vous revenez à la VC précédente, le contenu défile-t-il toujours ? Si c'est le cas, c'est un comportement attendu, car la grande barre de navigation ne doit s'afficher que lorsqu'elle défile jusqu'en haut, je crois.

0 votes

Oui, le contenu est toujours défilé. Ce qui est encore plus étrange, c'est qu'après avoir accédé à la VC racine et que les titres se sont effondrés, si je fais défiler à nouveau (dans n'importe quelle direction), les titres redeviennent grands (animation anon lisse). Cela semble être un bug ?

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