2009-06-24 12 views
13

Tengo un problema extraño al agregar un UINavigationController a mi aplicación de iPhone. Agrego el controlador de la siguiente manera:iPhone: Espacio extraño en la parte superior de UINavigationController

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

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

UIView *finalView = myeNavigationViewController.view; 

[self.view addSubview:finalView]; 

Todo parece funcionar como estaba previsto, excepto consigo un espacio en blanco raro en la parte superior de mi vista entre la barra de estado y la barra de título UINavigationController. alt text http://www.andrewskinner.name/problem.png

He buscado en línea pero realmente no sé qué buscar. ¿Alguien mas ha tenido este problema? ¿Puedes dirigirme en la dirección de alguna ayuda?

Gracias de antemano.

Respuesta

0

Quizás de alguna manera se haya conseguido dos UIViews, cada uno con una barra de estado. Comprueba el xib.

11

¿Qué la línea

UIView *finalView = myeNavigationViewController.view; 

añadir al código? Es redundante, ya que se puede añadir la vista directamente sin asignarlo a un UIView primera - y además es incorrecta, ya que hace referencia a la myNavigationController y no navigationController ..
que tienden a hacer esto

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

Ajuste del marco de los límites también elimina el espacio en blanco en la parte superior que preguntabas.

2

La cuestión es que UINavigationController idealmente debería ser la subvista directa de UIWindow. Se posicionará y tamaño por sí mismo. Cuando agrega UINavigationController en otra vista personalizada de una subvista UIWindow, debe tener en cuenta la posición y el tamaño de esta vista personalizada teniendo en cuenta si la barra de estado se muestra o no en la ventana UI.

Mi sugerencia es hacer la vista personalizada como una subclase de UINavigationController:

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

[myUIWindow addSubview:nav.view]; 

y dentro del mySubClass_NavigationController, puede hacer toda la personalización que se está haciendo ahora en su auto (lo que sea que el controlador es) .

2

Luché con esto por un tiempo usando un código muy similar al de la operación y también tenía una barra blanca sobre mi controlador de navegación.

Mi problema ocurrió al agregar el UINavigationController como una vista en un UITabController. El espacio en mi caso fue causado por la parte UINavigationBar del UINavigationController teniendo en cuenta la barra de estado y en realidad estaba superponiendo parte de la vista que estaba tratando de mostrar en el UINavigationController.

Este es el código que terminé en loadView en uno de mis controladores de vista 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]]; 

Hay más información en http://discussions.apple.com/message.jspa?messageID=7890362.

1

Hay una propiedad oscura en IB llamada "Oculta la barra inferior en el empuje". Solo revisalo. Me solucionó el problema.

Cuestiones relacionadas