2009-06-28 12 views
10

He creado una aplicación de iPhone simple que tiene dos archivos .xib. En el delegado de la aplicación al momento de aplicar lo lanzamiento acabado muestro el primer archivo .xib llamando:No estoy seguro de por qué UIView está siendo empujado por alrededor de 10px

[window addSubview:myView]; 

y hago lo mismo en una IBAction para un UIButton para cambiar la vista a myView2.

Lo que estoy descubriendo es que hay una barra blanca de alrededor de 10 píxeles cuando ejecuto la aplicación, para ambas vistas. También noté que los botones están desplazados por 10 píxeles (aprox.). Así que tengo la impresión de que la vista se muestra desde 10 píxeles fuera de la pantalla y termina en corto.

¿Alguna idea de por qué esto podría estar pasando, cómo puedo solucionarlo o cómo puedo seguir depurando lo que está pasando? He comprobado mis archivos .xib y están consumiendo toda la altura del dispositivo (es decir, no hay barras blancas), así que esto parece ser un problema dentro de XCode.

EDIT: He reducido el problema un poco. Estoy usando dos métodos para cargar la subvista. Cuando cargo la primera vista dentro de applicationDidFinishLaunching todo está bien. Sin embargo, si reemplazo los dos mensajes a window con el método [self originalView], todo se vuelve un poco desconcertante.

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

} 

Por lo que puedo ver, siempre estoy llamando a las mismas líneas de código, no importa si es en el interior del applicationDidFinishLaunching o en [self originalView] pero parece que window está resultando ser un objeto diferente.

Respuesta

12

Al usar un UIViewController de la manera normal (es decir, pushing it on a UINavigationController), se ajusta el marco de su vista.

Como está agregando la subvista manualmente, tiene que ajustar el marco usted mismo. El origen está en la esquina superior derecha (en la parte superior de la barra de estado). Desea cambiar su vista 20 píxeles hacia abajo.

+0

Todos los ejemplos que he visto usan UINavigationController para mostrar una jerarquía de listas, ¿para esto solo se usa? ¿O puedo usarlo para controlar qué vistas se muestran, incluso si no necesitan una barra de navegación, etc.? –

2

En el constructor de interfaz, puede agregar elementos de interfaz simulados que aparecerán programáticamente (como la barra de estado o la barra de navegación). En su inspector, seleccione su vista y vaya a la pestaña Atributos. Aquí puede simular la barra de estado, una barra superior o una barra inferior.

5

Aquí está mi solución:

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

Funciona bien para mí ahora, buena suerte ~ :)

1

Parece que llame a este pushVC UIViewController en el lugar equivocado. Yo tuve el mismo problema. Se resolvió moviendo [self.navigationController pushViewController: animated:] de viewDidLoad a viewDidAppear: en una jerarquía de UIViewController anterior.

1

Cada vez que aparece un hueco raro, o la vista está oculto en parte detrás de la barra de estado, que tiene algo que ver ni con

  1. definición shouldAutorotate en su controlador de raíz - no está seguro de si se trata de un error o no , pero trata de ser coherente con el regreso de esa función para todos los sub-viewcontrollers (por lo general resulta en un viewcontroller se oculta detrás de la barra de estado)
  2. una definición wantsFullscreen de un subvista - se establece en NO, si es posible

tuve bot h errores en mi aplicación y los resolvió! Espero que pueda ahorrarle algo de tiempo (lo desperdicié mucho)

Cuestiones relacionadas