2009-06-28 15 views
10

J'ai créé une application iPhone simple qui a deux fichiers .xib. Dans le délégué de l'application à l'application ne lancement d'arrivée j'affiche le premier fichier .xib en appelant:Je ne sais pas pourquoi UIView est poussé d'environ 10px

[window addSubview:myView]; 

et je fais la même chose sur un IBAction pour un UIButton pour changer la vue de myView2. Ce que je trouve est qu'il y a une barre blanche d'environ 10 pixels lorsque j'exécute 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 à court.

Avez-vous une idée de ce qui pourrait se passer, de la façon dont je peux y remédier ou de la façon dont je peux déboguer ce qui se passe? J'ai vérifié mes fichiers .xib et ils consomment toute la hauteur de l'appareil (c'est-à-dire pas de barres blanches), donc cela semble être un problème à l'intérieur de 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 applicationDidFinishLaunching tout va bien. Toutefois, si je remplace les deux messages à window avec la méthode [self originalView], alors tout va un peu hawwire.

- (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 elle est à l'intérieur du applicationDidFinishLaunching ou [self originalView] mais il semble que window se tourne vers un autre objet.

Répondre

12

Lorsque vous utilisez un UIViewController de la manière normale (c'est-à-dire pushing it on a UINavigationController), il ajuste le cadre de la 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 voulez déplacer votre vue de 20 pixels vers le bas.

+0

Tous les exemples que j'ai vus utilisent UINavigationController pour afficher une hiérarchie de listes, c'est pour quoi ça sert seulement? Ou est-ce que je peux l'utiliser pour contrôler quelles vues sont affichées, même si elles n'ont pas besoin d'un NavigationBar etc? –

2

Dans le constructeur d'interface, vous pouvez ajouter des éléments d'interface simulés qui apparaîtront par programme (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.

5

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]; 

Il fonctionne bien pour moi maintenant, bonne chance :) ~

1

On dirait que vous appelez pushVC à ce UIViewController au mauvais endroit. J'ai eu le même problème. Il a été résolu en déplaçant [self.navigationController pushViewController: animated:] de viewDidLoad à viewDidAppear: dans un précédent UIViewController dans la hiérarchie.

1

Chaque fois qu'un écart bizarre apparaît, ou la vue est en partie caché derrière la barre d'état, il a quelque chose à faire avec

  1. définition shouldAutorotate dans votre contrôleur racine - ne sais pas s'il est un bug ou non , mais essayez de rester cohérent avec le retour de cette fonction pour tous les sous-viewcontrollers (résultats habituellement dans un viewcontroller étant caché derrière la barre d'état)
  2. une définition wantsFullscreen d'un sous-vue - réglé sur NO si possible

j'avais bot h bugs dans mon application et les a résolus! J'espère pouvoir vous faire gagner du temps (j'ai beaucoup gaspillé)