Le Apple dans le ce qui est nouveau dans la vidéo WWDC de Cocoa Touch) indique que la nouvelle barre de navigation pour titres de grande taille s’accroche comme par magie à la vue de défilement de niveau supérieur du fichier sous-jacent. voir le contrôleur et se réduire/s’étendre automatiquement tout en défilant de haut en bas (et par "comme par magie", il voulait probablement dire qu’ils n’avaient pas réussi à ajouter cette fonctionnalité à la déjà embarrassante UINavigationController
-UINavigationBar
- UINavigationitem
API de manière utilisable, ils ont donc dû se connecter à une vue de défilement choisie de manière heuristique dans les coulisses)
Même si je savais que cette réduction/expansion "automatique" ne fonctionnerait pas si je déviais le moins du système de base UINavigationController
+ UITableView
/UICollectionView
, il semble que même dans ce cas le plus simple, cela ne fonctionne pas comme prévu.
Voici ce que j'ai
Un UITabBarController
qui contient un UINavigationController
, qui contient un UIViewController
, qui a un UITableView
comme son view
. En appuyant sur la première cellule du tableau, vous placez un deuxième contrôleur de vue sur la pile de navigation:
Pas de code, juste le storyboard.
J'ai vérifié "Préfère les gros titres" pour que la barre de navigation active les gros titres. Maintenant, si je lance l'application et que je fais défiler la vue sous forme de tableau, la barre de navigation reste la même - grande - taille; ça ne s'écroule pas:
Cependant, j'ai constaté que si je configurais l'élément de navigation du deuxième contrôleur de vue pour utiliser la petite barre de navigation (en définissant "Grand titre" sur la valeur "Jamais" ), puis, si j'ouvre cette page et que je retourne en arrière, l'effondrement interactif commence comme par magie à fonctionner sur la première page:
Est-ce que je manque quelque chose ici ou cette fonctionnalité ne fonctionne pas correctement? Voici l'exemple de projet que j'utilise: https://github.com/tzahola/iOS-11-Large-Title-Navigation-Bar
Et au fait, j'utilise l'iOS 11 officiellement sorti, pas les bêtas.
Mise à jour du 2017-09-23: J'ai envoyé un rapport de bogue à Apple et ouvert un ticket sur openradar.me: http://www.openradar.me/radar ? id = 5017601935671296
Bonnes nouvelles! Je viens de comprendre que si je définissais "Grands titres" sur "Jamais" sur le storyboard, puis définissez-le via le code, puis cela fonctionne:
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.largeTitleDisplayMode = UINavigationItemLargeTitleDisplayModeAutomatic;
}
On dirait que Apple a oublié de gérer le cas lorsque l'élément de navigation a son largeTitleDisplayMode
défini via l'interface Builder.
Donc, jusqu'à ce qu'ils résolvent ce problème, laissez "Grands titres" comme "Jamais" sur les storyboards, et les définir via le code dans viewDidLoad
.
Il suffit de faire cela sur le premier contrôleur de vue. Les contrôleurs de vue suivants respectent la valeur du storyboard.
Ou au lieu de changer quoi que ce soit dans le storyboard, procédez comme suit:
override func viewDidLoad() {
super.viewDidLoad()
if #available(iOS 11.0, *) {
self.navigationItem.largeTitleDisplayMode = .never
self.navigationItem.largeTitleDisplayMode = .always
}
}
Peu importe la langue!
En effet, les gros titres sur les éléments de navigation décident s’ils doivent ou non être réduits en fonction du comportement des grands titres sur le titre de l’élément de navigation précédent.
Comme je ne peux pas commenter, je vais partager ici la réponse que j'ai postée
https://stackoverflow.com/a/47493375/8385022
J'ai trouvé une solution de contournement sur ce site: si la tableView (ou l'élément avec défilement) n'est pas la première vue de votre hiérarchie, le titre de grande taille ne parvient pas à se masquer automatiquement.
Exemple qui ne fonctionnera PASExemple qui fonctionnera
https://markusbodner.com/2017/10/08/fix-large-navigation-bar-title-not-hiding-on-scroll-in-ios-11/
J'ai ajouté sur la vue willAppear:
if #available(iOS 11.0, *) {
navigationController?.navigationBar.prefersLargeTitles = true
} else {
// Fallback on earlier versions
}
@TamasZahola @ mohamede1945
Les gars j'ai eu le même problème. J'ai pu résoudre ce problème en ajoutant l'extrait suivant sur mon premier contrôleur d'affichage du contrôleur de navigation
navigationController?.navigationBar.prefersLargeTitles = true