Question

J'ai créé une application iPhone simple qui contient deux fichiers .xib. Dans l'application, le délégué à l'application a terminé le lancement. J'affiche le premier fichier .xib en appelant:

[window addSubview:myView];

et je fais la même chose sur un IBAction pour qu'un UIButton modifie l'affichage en myView2.

Ce que je constate, c’est qu’il ya une barre blanche d’environ 10 pixels lorsque je lance l’application, pour les deux vues. Je remarque également que les boutons sont décalés de 10 pixels (environ). J'ai donc l'impression que la vue est affichée à partir de 10 pixels de l'écran et se termine courte.

Avez-vous une idée de la raison pour laquelle cela se produit, comment puis-je résoudre ce problème, ou comment puis-je améliorer le débogage? J'ai vérifié mes fichiers .xib et ils consomment toute la hauteur du périphérique (c'est-à-dire pas de barres blanches), donc cela semble être un problème dans XCode.

EDIT: J'ai un peu réduit le problème. J'utilise deux méthodes pour charger la sous-vue. Lorsque je charge la première vue à l'intérieur de applicationDidFinishLaunching tout va bien. Cependant, si je remplace les deux messages de window par la méthode [self originalView], tout va un peu en vadrouille.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    
    //[self originalView];  <- I want to use this instead of the following two lines

    // Override point for customization after app launch    
    [window addSubview:viewController.view];
    [window makeKeyAndVisible];

}

-(void)endView{
    endV = [[EndViewController alloc] initWithNibName:@"EndView" bundle:nil];
    [window removeFromSuperview];
    [window addSubview:endV.view];  
}
-(void)originalView{
    viewController = [[MyAppViewController alloc] init];
    [window removeFromSuperview];
    [window addSubview:viewController.view];

}

D'après ce que je peux voir, j'appelle toujours les mêmes lignes de code, peu importe si elles se trouvent dans <=> ou dans <=>, mais il semble que <=> se révèle être un objet différent.

Était-ce utile?

La solution

Lorsque vous utilisez un UIViewController normalement (c.-à-d. en le poussant sur un UINavigationController ), il ajuste le cadre de sa vue.

Puisque vous ajoutez la sous-vue manuellement, vous devez ajuster le cadre vous-même. L'origine est dans le coin supérieur droit (en haut de la barre d'état). Vous souhaitez décaler votre vue de 20 pixels vers le bas.

Autres conseils

Voici ma solution:

// adjust the frame of subview which is going to be add
self.navController.view.frame = CGRectMake(0, 0, 320, 460);
[self.view addSubView:self.navController.view];

Cela fonctionne bien pour moi maintenant, bonne chance ~)

Dans le générateur d'interface, vous pouvez ajouter des éléments d'interface simulés qui apparaîtront par programmation (tels que la barre d'état ou la barre de navigation). Dans votre inspecteur, sélectionnez votre vue et accédez à l'onglet Attributs. Ici, vous pouvez simuler la barre d’état, une barre supérieure ou une barre inférieure.

On dirait que vous appelez pushVC vers ce UIViewController au mauvais endroit. J'ai eu le même problème. Ce problème a été résolu en déplaçant [self.navigationController pushViewController: animated:] de viewDidLoad vers viewDidAppear: dans une hiérarchie <=> antérieure.

Chaque fois qu'un étrange écart apparaît ou que la vue est partiellement masquée derrière la barre d'état, cela a quelque chose à voir avec

  1. devrait autoriser la définition dans votre contrôleur racine - vous ne savez pas s'il s'agit d'un bogue ou non, mais essayez de rester cohérent avec le retour de cette fonction pour tous les contrôleurs de sous-vue (habituellement, un contrôleur de vue est caché derrière la barre d'état)
  2. définition de sous-vue de WantFull sur l'écran - définie sur NO si possible

J'ai eu les deux bugs dans mon application et les a résolus! J'espère que je pourrais vous faire gagner du temps (j'ai perdu beaucoup de temps là-dessus)

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