Question

Je suis probablement faire quelque chose de mal ici parce que cela ressemble un peu stupide.
J'installe un titleview personnalisé (sous la forme d'un UILabel) sur mon UINavigationController qui est le même sur chaque page. Pour faciliter cela, je l'ai créé une fonction dans mon délégué application pour afficher l'étiquette correctement. J'appelle alors cette fonction sur les sous-vues juste après que je le pousser à la pile de navigation.
Voici le code (ce qui en fait probablement plus de sens que mon explication):

//In MyAppDelegate.m:
- (void)showTitleForNavigationController:(UINavigationController*) navController {
    UILabel *label = [[UILabel alloc] init];
    // set up label attributes
    // ...
    [label sizeToFit]; //without this line my label won't show at all
    [navController.navigationBar.topItem setTitleView:label];
    [label release];
}

// In SomeViewController.m, when pushing another controller onto the stack:
    UIViewController *otherViewController = //initialize other view controller;
    [self.navigationController pushViewController:otherViewController animated:YES];
    [(MyAppDelegate*)[[UIApplication sharedApplication] delegate] showTitleForNavigationController:otherViewController.navigationController];

Mon problème est que quand je pousse le prochain contrôleur de vue sur la pile, et les nouvelles diapositives de contrôleur à travers en douceur, pendant toute la durée de l'animation des bâtons d'étiquette en haut à gauche avant de finalement claquer en place après l'animation est terminée . Il semble vraiment bizarre et laid. Comment puis-je mettre en place l'étiquette proprement qu'il glisse de la vue suivante en douceur? Certes, c'est simple quelque chose qui me manque ...

Était-ce utile?

La solution 2

Ce que je fini par faire était en utilisant une image avec le texte inclus dans le backround pour l'en-tête, donc plutôt que d'animer en douceur que je voulais à l'origine, il n'animant du tout.
Considérant qu'il est de la même position partout, ce n'est pas un gros problème cependant.

Autres conseils

A très tard réponse à cette question, mais je suis tombé sur le même problème et a trouvé une autre façon de le résoudre, sans utiliser une image. Je pensais que je partagerais ma solution car cela pourrait aider quelqu'un.

Dans mon cas, je Réglage d'une UILabel être le titleview, et je compris que seulement quand je mets la propriété titleview dans la méthode viewDidLoad, il anime correctement. Dans certains cas cependant, je ne savais pas encore le titre dans mon viewDidLoad (dans certains cas, je avais besoin d'utiliser un titre à partir d'une requête HTTP par exemple). Donc, ma solution pour ces cas était de définir la propriété titleview à mon customLabel avec le texte @ »" dans viewDidLoad, et chaque fois que je suis le vrai titre, je ne change la propriété texte de mon étiquette personnalisée.

- (void)viewDidLoad {
   [super viewDidLoad];
   // Do any additional setup after loading the view from its nib.

   //set temporary title, the MBMUINavigationBarTitleView is a UIView subclass whose  viewWithTitle method returns an autoreleased UIlabel with my custom settings, custom font etc.
   self.navigationItem.titleView = [MBMUINavigationBarTitleView viewWithTitle:@" "];
}

//somewhere later, when I have the real title
UILabel* titleLabel = (UILabel*)self.navigationItem.titleView;
[titleLabel setText:theRealTitle];

Je suis dans une situation similaire à Ylva, en utilisant une instance d'une classe de texte personnalisé pour la propriété UINavigationItem's de titleView. Cependant, je trouve la configuration dans viewDidLoad n'a pas résolu le pépin d'animation.

Ma solution au problème était d'attendre jusqu'à ce que le contrôleur de vue en question était sauté hors de la pile du contrôleur de navigation, et à ce moment retirer le UINavigationItem's personnalisé titleView donc il ne doit jamais Animez du tout.

Quand mon UINavigationController sous-classe reçoit le message de popViewControllerAnimated:, je copie le champ texte de mon texte personnalisé titre (UINavigationItem's de titleView) dans la propriété de UINavigationItem's title et définissez la propriété titleView à zéro. Alors le UINavigationController va de l'avant et éjecte du contrôleur de vue et que l'étiquette de titre standard de barre de navigation est animé (pas mon titre personnalisé), pépin libre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top