2009-06-28 20 views
10

Ho creato una semplice app per iPhone con due file .xib. Nella delegato applicazione a applicazione ha finito di lancio visualizzo il primo file .xib chiamando:Non sono sicuro del motivo per cui UIView viene spostato di circa 10px

[window addSubview:myView]; 

e io faccio lo stesso su un IBAction per un UIButton per modificare la visualizzazione a myView2.

Quello che sto trovando è che c'è una barra bianca di circa 10 pixel quando eseguo l'app, per entrambe le viste. Inoltre noto che i pulsanti sono sfalsati di 10 pixel (circa). Quindi ho l'impressione che la vista venga visualizzata da 10 pixel fuori dallo schermo e finisca in breve.

Qualche idea del motivo per cui ciò potrebbe accadere, come posso risolverlo o come posso eseguire il debugging di più su cosa sta succedendo? Ho controllato i miei file .xib e stanno consumando l'intera altezza del dispositivo (cioè senza barre bianche), quindi questo sembra essere un problema all'interno di XCode.

EDIT: Ho ristretto il problema un po '. Sto usando due metodi per caricare la sottoview. Quando carico la prima vista all'interno di applicationDidFinishLaunching, tutto va bene. Tuttavia, se sostituisco i due messaggi a window con il metodo [self originalView], tutto diventa un po 'torbido.

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

} 

Da quello che posso vedere, sto sempre chiamando le stesse linee di codice, non importa se si è all'interno della applicationDidFinishLaunching o in [self originalView] ma sembra window si sta rivelando un oggetto diverso.

risposta

12

Quando si utilizza un UIViewController in modo normale (ad esempio pushing it on a UINavigationController), regola la cornice della vista.

Poiché si aggiunge la visualizzazione secondaria manualmente, è necessario regolare la cornice da soli. L'origine è nell'angolo in alto a destra (nella parte superiore della barra di stato). Vuoi spostare la vista di 20 pixel verso il basso.

+0

Tutti gli esempi che ho visto usano UINavigationController per mostrare una gerarchia di liste, è questo per cui è usato solo? Oppure posso usarlo per controllare quali viste sono visualizzate, anche se non hanno bisogno di una barra di navigazione ecc.? –

2

Nel builder dell'interfaccia, è possibile aggiungere elementi di interfaccia simulati che verranno visualizzati in modo programmatico (come la barra di stato o la barra di navigazione). Nel tuo ispettore, seleziona la tua vista e vai alla scheda Attributi. Qui puoi simulare la barra di stato, una barra in alto o una barra in basso.

5

Ecco la mia soluzione:

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

Funziona bene per me, ora, buona fortuna ~ :)

1

Sembra che si chiama pushVC a questo UIViewController nel posto sbagliato. Ho avuto lo stesso problema. È stato risolto spostando [self.navigationController pushViewController: animated:] da viewDidLoad a viewDidAppear: in un precedente UIViewController in gerarchia.

1

Ogni volta che appare un vuoto strano, o la vista è in parte nascosta dietro la barra di stato, che ha qualcosa a che fare né con

  1. definizione shouldAutorotate nel controller principale - non so se si tratta di un bug o no , ma cercare di rimanere coerenti con il ritorno di quella funzione per tutti i sub-viewcontrollers (di solito si traduce in una viewcontroller essere nascosto dietro la barra di stato)
  2. una definizione wantsFullscreen di una visualizzazione secondaria - impostata su NO, se possibile

ho avuto bot h bug nella mia app e li ho risolti! Spero di poterti risparmiare tempo (ne ho sprecato parecchio)

Problemi correlati