Question

J'ai un problème étrange avec l'ajout d'un UINavigationController à mon application iPhone. J'ajoute le contrôleur comme suit:

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];

myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];

UIView *finalView = myeNavigationViewController.view;

[self.view addSubview:finalView];

Tout semble fonctionner comme prévu, sauf un espace blanc étrange en haut de mon écran entre la barre d'état et la barre de titre de UINavigationController. alt texte http://www.andrewskinner.name/problem.png

J'ai effectué une recherche en ligne mais je ne sais pas vraiment quoi chercher. Quelqu'un d'autre a-t-il eu ce problème? Pouvez-vous m'indiquer de l'aide?

Merci d'avance.

Était-ce utile?

La solution

Autres conseils

Qu'est-ce que la ligne

UIView *finalView = myeNavigationViewController.view;

ajouter au code? Il est redondant car vous pouvez ajouter la vue directement sans l'affecter à une UIView en premier. De plus, elle est incorrecte car elle fait référence à myNavigationController et non à navigationController ..
J'ai tendance à le faire

myViewController *viewController = [[myViewController alloc] initWithNibName:@"myView" bundle:nil];    
myNavigationViewController *navigationController = [[myNavigationViewController alloc] initWithRootViewController:viewController];
[navigationController.view setFrame: [self.view bounds]];
navigationController.delegate = self;
[self.view addSubview:[navigationController view]];

Le réglage du cadre sur les limites supprime également l'espace blanc au-dessus duquel vous vous interrogiez.

Le problème est que UINavigationController devrait idéalement être la sous-vue directe de UIWindow. Il se positionnera et se dimensionnera seul. Lorsque vous ajoutez UINavigationController dans une autre vue personnalisée d'une sous-vue UIWindow, vous devez prendre soin de la position et de la taille de cette vue personnalisée en tenant compte du fait que la barre d'état est affichée ou non dans la fenêtre UIWindow.

Ma suggestion est de rendre la vue personnalisée en tant que sous-classe de UINavigationController:

mySubClass_NavigationController*nav=[[mySubClass_NavigationController alloc] initWithRootViewController:viewController ];

[myUIWindow addSubview:nav.view];

et dans mySubClass_NavigationController, vous pouvez effectuer toute la personnalisation que vous effectuez maintenant vous-même (quel que soit ce contrôleur).

Pendant un certain temps, j'ai eu du mal à utiliser cela avec un code très similaire à celui des opérations et une barre blanche au-dessus de mon contrôleur de navigation.

Mon problème est survenu lors de l'ajout du UINavigationController en tant que vue dans un UITabController. L'espace dans mon cas a été provoqué par la partie UINavigationBar de UINavigationController, en tenant compte de la barre d'état. Elle recouvrait en fait une partie de la vue que j'essayais d'afficher dans UINavigationController.

Il s'agit du code que j'ai obtenu avec loadView dans l'un de mes contrôleurs de vue UITabBarController.

SomeUITableViewController *screenList = [[SomeUITableViewController alloc] init];

UINavigationController *navController = [[UINavigationController alloc]
                                         initWithRootViewController:screenList];

CGRect frame = [[navController navigationBar] frame];

frame.origin.y = 0; // Was 20, set to 0 to not take into account the status bar.

[[navController navigationBar] setFrame:frame];

[self setView:[navController view]];

Des informations supplémentaires sont disponibles à l'adresse http://discussions.apple.com/message.jspa. ? messageID = 7890362 .

Il existe dans IB une propriété obscure appelée "Masque la barre inférieure lors du Push". Il suffit de vérifier. Cela a résolu le problème pour moi.

Peut-être que vous vous êtes en quelque sorte procuré deux UIViews, chacun avec une barre d'état. Vérifiez le xib.

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