Pregunta

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

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 según lo planeado, excepto que aparece un espacio en blanco extraño en la parte superior de mi vista entre la barra de estado y la barra de título de UINavigationController. texto alternativo http://www.andrewskinner.name/problem.png

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

Gracias de antemano.

¿Fue útil?

Otros consejos

¿Qué hace la línea?

UIView *finalView = myeNavigationViewController.view;

agregar al código? Es redundante ya que puede agregar la vista directamente sin asignarla primero a una UIView, además es incorrecta, ya que hace referencia al myNavigationController y no a navigationController.
Tiendo 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]];

Establecer el marco en los límites también elimina el espacio en blanco en la parte superior sobre la que estaba preguntando.

El problema es que UINavigationController idealmente debería ser el subView directo de UIWindow. Posicionará y dimensionará por sí mismo. Cuando agrega UINavigationController en otra vista personalizada de una subvista UIWindow, debe cuidar 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 UIWindow.

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 de mySubClass_NavigationController, puedes hacer toda la personalización que estás haciendo ahora mismo (sea cual sea ese controlador).

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

Mi problema ocurrió al agregar UINavigationController como 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 superpuso parte de la vista que estaba tratando de mostrar en el UINavigationController.

Este es el código con el 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 .

Hay una propiedad oscura en IB llamada " Oculta la barra inferior al presionar " ;. Solo compruébalo. Resolvió el problema para mí.

Tal vez de alguna manera te has conseguido dos UIViews, cada uno con una barra de estado. Verifique el xib.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top