10
votes

UinavigationController a une barre de barre d'état supplémentaire en haut

Cela semblait assez simple lorsque je l'ai mis en place, mais je ne peux pas expliquer pourquoi cet écart est présent entre la barre d'état et la barre de navigation. En outre, la vue contenue semble être correctement alignée, et c'est juste la barre de NAV qui est décalée. L'écart ressemble à la taille de la barre d'état, alors je m'attends à ce que cela ait quelque chose à voir avec cela, mais je ne sais pas quoi.

 bar NAV avec espace supplémentaire p>

Voici le code permettant de configurer le contrôleur de navigation: p>

- (void)viewDidLoad
{
    [super viewDidLoad];

    advancedVC = [[AdvancedSearchFormVC alloc] initWithNibName:@"AdvancedSearchForm" bundle:nil];
    UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:advancedVC];
    nav.navigationBar.tintColor = [UIColor defaultNavBarTint];
    nav.navigationBar.topItem.title = NSLocalizedString(@"SearchTitle", nil);
    UIBarButtonItem *searchButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"SearchButton", nil) style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)];          
    nav.navigationBar.topItem.rightBarButtonItem = searchButton;

    self.view = nav.view;
}


2 commentaires

Notez qu'il s'agit d'une zone où les différences existent entre les versions iOS 5 et antérieures. Si vous utilisez la mise en page "en conserve" pour le contrôleur de navigation, il est assez portable, mais si vous l'avez personnalisé, les choses sautent un peu entre les deux versions. (Je n'ai jamais bien cloué ce qui fait la différence, mais ce que vous voyez est typique du code iOS 4 en cours d'exécution sur iOS 5.)


Voir cette première réponse de cette question Stackoverflow.com/Questtions/5850705/...


7 Réponses :


0
votes

Étant donné que vous ajoutez Advancedvc code> sous forme de em> de em> de self.view code>, il est ajouté à l'intérieur du cadre de auto .View code> que je suppose est déjà compensant déjà la barre d'état.

Vous pouvez probablement facilement résoudre ce problème en ajoutant cette ligne: p>

self.view = nav.view;


0 commentaires

0
votes

Le problème a été résolu en fixant la manière dont le contrôleur de navigation a été inséré. Au lieu de l'insérer dans une vue qui avait été placée sur le contrôleur à onglets, le contrôleur NAVIGAION aurait dû être mis directement sur le contrôleur de navigation.

advancedSearchFormVC = [[AdvancedSearchFormVC alloc] initWithNibName:@"AdvancedSearchForm" bundle:nil];
UINavigationController *searchNavController = [[UINavigationController alloc] initWithRootViewController:advancedSearchFormVC];


1 commentaires

Jim - Je ne suis pas votre solution exactement. Pouvez-vous poster le code pour montrer le correctif réel s'il vous plaît?



7
votes

J'ai déjà eu le même problème. Le code que j'ai ajouté uinavigationbar à UIViewController: xxx

solution:

Cochez la case "Veut Plein écran" avec l'inspecteur des attributs de votre UIViewController.


0 commentaires

11
votes

Le problème est en effet que le contrôleur de navigation attend toujours de quitter la place de la barre d'état, qui est l'écart de 20 pixels. J'ai cherché un moment avant que j'ai trouvé cette solution qui fonctionne:

//this shows how to store your navigation controllers in the app delegate
//assumes you've added 2 properties (UINavigationController*)"navController" and (UIViewController*)"rootController" in your app delegate
//...don't forget to add #import "AppDelegate.h" to the top of the file

AppDelegate *app = (AppDelegate*)[[UIApplication sharedApplication] delegate];
[app.navController pushViewController: app.rootController animated:YES];
//now apply the offset trick to remove the status gap
app.navController.view.frame = CGRectOffset(app.navController.view.frame, 0.0, -20.0);


0 commentaires

1
votes

Comme nous le savons tous maintenant maintenant, le décalage de 20 pixels consiste à fournir un espace pour la barre d'état sur le dessus. Mais en général, le système de coordonnées des contrôleurs d'affichage est maintenu en place et seule la barre de la barre de navigation est décalée de 20 pixels. Cela rend la barre de navigation pour chevaucher réellement les 20 pixels de la vue.

enregistrer l'origine de la barre de navigation, il montrera (0,0, 20,0)

de sorte que la solution consiste donc à repositionner la navigation Origine de la barre à (0,0, 0,0) dans la viewwillappear. xxx


0 commentaires

7
votes

Vous pouvez essayer de définir l'attribut sous les barres supérieures non coché de attributs section de UIViewController.


0 commentaires

0
votes

Le problème est que UinavigationController.View doit être ajouté à la vue de dessus. Il suffit de trouver le top premier et cela fonctionnera bien.


0 commentaires