iOS 7 Personnalisé UINavigationBar TitleView se déplace lorsque l'on Pousse ou Popping nouveau-Vue-Contrôleur
Je suis en utilisant un titre personnalisé pour un UINavigationBar avec le code suivant:
//Set a label to the nav bar
THLabel *titleLabel = [[THLabel alloc] init];
titleLabel.text = @"Test";
titleLabel.font = [UIFont fontWithName:APP_FONT size:22.0];
titleLabel.frame = CGRectMake(0, 0, 100, 30);
titleLabel.textAlignment = NSTextAlignmentCenter;
titleLabel.textColor = CUSTOM_LIGHT_BLUE;
titleLabel.strokeColor = kStrokeColor;
titleLabel.strokeSize = kStrokeSize;
self.navigationItem.titleView = titleLabel;
Le problème est que lors de la présentation d'un nouveau viewcontroller et puis de revenir à l'affichage d'origine contrôleur de cette coutume en vue des quarts et puis re-centres de lui-même. Veuillez voir la vidéo pour une démonstration.
Veuillez voir la vidéo ici:
https://www.youtube.com/watch?v=961CCVQmpJM&feature=youtu.être
J'ai désactivé d'un redimensionnement automatique de tous les sous-vue pour la manette de navigation avec à la fois le storyboard et dans le code pour chaque vue-contrôleur:
//Set the navigation bar hidded on the log in view
UINavigationController* mainViewController = (UINavigationController*)self.appDelegate.window.rootViewController;
[mainViewController setNavigationBarHidden:YES];
[[mainViewController navigationBar] setAutoresizesSubviews:NO];
Cependant encore il redimensionne! Comment puis-je arrêter ce - que je fais mal? Merci!
- Où est-ce que titleView code assis? Avez-vous essayé de le déplacer vers
viewDidLoad
ouinit
? - J'ai essayé cette partie du code (puisque je n'ai pas THLabel classe) dans mon application et que tout fonctionne comme prévu, aucune étrange mouvement de la vue titre: UILabel *titleLabel = [[UILabel alloc] init]; titleLabel.text = @"Test"; titleLabel.font = [UIFont fontWithName:@"Bakersville" taille:22.0]; titleLabel.frame = CGRectMake(0, 0, 100, 30); titleLabel.textAlignment = NSTextAlignmentCenter; auto.navigationItem.titleView = titleLabel; Pourriez-vous fournir le code de THLabel classe donc je voudrais vérifier si je vois quelque chose de mal là?
- Merci pour votre commentaire, Barbara. Ici, c'est le dépôt Github où THLabel est hébergé: github.com/MuscleRumble/THLabel
- J'ai changé tous mes THLabels à UILabels et il a encore ce problème.
InformationsquelleAutor PhilBot | 2014-05-03
Vous devez vous connecter pour publier un commentaire.
C'est reproductible pour moi que si je place titleView code dans viewWillAppear. Déplacer vers viewDidLoad résout le problème
Je voudrais intégrer l'étiquette à l'intérieur d'un
UIView
. Interface Builder n'aime pas mettre directement unUILabel
dans letitleView
pour certaines raisons qui peuvent être liées à votre problème.Aussi essayer de mettre le
autoResizingMask
àUIViewAutoresizingFlexibleTopMargin
. Dans mon expérience, tout affichage personnalisé dans les bars se comporte mieux de cette façon.UILabel
sans personnalisation? Même juste une simple noirUIView
pour limiter les causes possibles.Expansion sur @Alex Peda la réponse ci-dessus, je suis la recherche que sur iOS7, en dehors de viewDidLoad, il semble y avoir un minimum de titre de largeur pour un titre personnalisé. Voici ce que je fais, ci-dessous. Remarque il existe quelques méthodes ci-dessous particulier à mon code.
Ce qui s'est passé pour moi aussi. Deux choses que vous pourriez faire :
1) assurez-vous que le réglage de la navigation se fait dans les deux viewDidLayoutSubviews ou viewDidLoad comme mentionné dans la réponse ci-dessus
2) j'ai eu de droite et de gauche bouton de la barre d'élément nul, mais seulement appelé après le titre de l'étiquette a été défini. assurez-vous de définir le droit et le gauche bouton de la barre d'éléments nul (si vous ne les utilisez pas, bien sûr) avant de définir les titlelabel à titleview.
Dans mon cas, c'est arrivé parce que j'ai été la mise UIBarButton avant titleView. Réglage titleView devrait être le premier. Fonctionne parfaitement maintenant.
Ce qui a fonctionné pour moi a été de créer une variable dans la vue-contrôleur qui détient le titre désiré vue, puis l'initialiser dans
viewDidLoad
. Ensuite, vous pouvez définir ce point de vue auself.navigationItem.titleView
dansviewWillAppear
et il doit s'afficher correctement. Pas besoin de mise autoResizeMask, ou rightBarButtons, etc.Exemple: