2010-10-25 22 views
1

J'essaie de positionner la barre de navigation sous le haut de l'écran.iPhone: déplacer UINavigationBar vers le bas?

J'ai essayé ce qui suit dans viewWillAppear:

self.navigationController.view.frame = CGRectMake(0.0, 54.0, 320.0, 426.0); 
self.navigationController.navigationBar.frame = CGRectMake(0.0, 0.0, 320.0, 44.0); 

Le problème est qu'il semble ne fonctionner que la première fois la vue est affichée. Si vous allez dans un autre onglet, et retour, la barre de navigation est en haut de l'écran. Cela se produit également lorsque l'iPhone est pivoté. Dois-je essayer d'ajuster le cadre du contrôleur de navigation, ou devrais-je plutôt essayer d'ajouter le contrôleur de navigation à une autre vue qui est en dessous du haut de l'écran?

+0

Qu'en est-il de l'utilisation d'Interface Builder pour ce faire? Il semble que je peux faire glisser dans la barre de navigation à n'importe quel endroit dans une vue. Je ne suis pas sûr si je peux accrocher le contrôleur de navigation à cela cependant. –

+0

Si j'utilise UINavigationController dans IB, il le place en haut de la vue uniquement. De la UINavigationController Référence de la classe: @property (nonatomic, en lecture seule) UINavigationBar * navigationBar Discussion Il est permis de modifier les propriétés barStyle ou translucides de la barre de navigation, mais vous ne devez jamais changer son cadre, limites, ou les valeurs alpha directement . Pour afficher ou masquer la barre de navigation, vous devez toujours le faire via le contrôleur de navigation en modifiant sa propriété navigationBarHidden ou en appelant la méthode setNavigationBarHidden: animated:. –

+0

J'ai fini par utiliser Interface Builder pour configurer une vue avec une image et une barre de navigation avec un contrôleur de navigation dans un contrôleur de barre d'onglets. Maintenant, quand je pousse une autre vue dans le code, il me manque l'image et la barre de navigation. –

Répondre

-1

Je peux modifier le cadre en remplaçant la propriété frame dans viewDidAppear de mon contrôleur de navigation personnalisé. J'ajoute également la vue du contrôleur de navigation à une autre vue qui est une sous-vue de la fenêtre et effectue le même découpage. Faites attention car de cette manière vous perdrez les appels standard à tous les contrôleurs de vue qui seront attachés aux contrôleurs de navigation. Je ne me souviens pas si j'ai aussi utilisé une vue personnalisée pour mes contrôleurs de vue: peut-être oui et avec didMoveToSuperview ou didMoveToWindow remplacés juste pour émuler le comportement par défaut. J'espère que ça aide et pardonnez mon anglais.

+0

vous devriez montrer des exemples SI cela a fonctionné pour vous. Ton anglais est bon. Votre réponse n'aide pas autant que possible si vous y mettez plus d'efforts. – jungledev

2

Bien que tard, j'espère que cela peut encore aider quelqu'un d'autre. J'ai utilisé le code de Stephens à l'intérieur de viewDidAppear: animé et la barre de navigation reste sur le retour à l'onglet. Cela m'a permis d'utiliser un logo au-dessus de la barre de navigation. Je l'ai utilisé dans mon viewController.

- (void)viewDidAppear:(BOOL)animated { 
[super viewDidAppear:animated]; 
self.navigationController.view.frame = CGRectMake(0.0, 100.0, 320.0, 426.0); 
self.navigationController.navigationBar.frame = CGRectMake(0.0, 0.0, 320.0, 44.0); 
[self loadData]; 
    }