2010-06-02 28 views
10

¿Es posible utilizar un UINavigationController de forma tal que no use la ventana completa?UINavigationController no de pantalla completa

He intentado configurar su marco de vista, así como agregar su vista a otra vista (no de pantalla completa) en lugar de la ventana, y parece que no funciona.

+0

¿Cómo resolvió esto? – Zebs

+0

@bentford ¿Cómo resolvió * usted * esto? –

+1

¿Quién eras tú, DenverCode9? ¡¿QUÉ VISTE?! – buley

Respuesta

0

Esto es difícil de responder porque es complicado.

En iPhone, no puede tener un UINavigationController que sea más corto que la pantalla. Por lo tanto, si desea mostrar un banner publicitario, muéstrelo sobre la barra de herramientas inferior o debajo de la barra de navegación superior.

En iPad puede tener dos UINavigationControllers uno al lado del otro, pero en mi caso, todavía ocupan toda la altura de la pantalla. Dado el comportamiento del iPhone, no intenté modificar el comportamiento de altura en el iPad.

6

No se puede cambiar directamente el tamaño de un UINavigationController o sus subvistas directamente, ya que el UINavigationController cambia automáticamente su tamaño a pantalla completa, sin importar en qué se hayan configurado sus marcos. La única manera que he sido capaz de superar esto hasta ahora es la siguiente:

En primer lugar, crear una instancia de UINavigationController como lo haría normalmente:

UINavigationController *nc = [[UINavigationController alloc] init]; 
self.navController = nc; 
[nc release]; 

A continuación, cree una instancia de UIView, obligado a el tamaño que realmente quiere:

UIView *navView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, DESIRED_HEIGHT)]; 
navView.clipsToBounds = YES; 
[navView addSubview:self.navController.view]; 
[self.view addSubview:navView]; 
[navView release]; 

propiedad clipsToBounds del NavView debe ser SÍ, o la UINavigationController y es vista seguirán apareciendo en pantalla completa. Luego, agregue el UINavigationController a esa vista restringida. Esta UIView se puede agregar a la vista de UIViewController, como se ve arriba.

Lo que hay que tener en cuenta es que las opiniones de cualquier UIViewController que se agregan a la UINavigationController todos tendrán su contenido restringido a los límites de NavView, no el marco de las subvistas añadidos a la UINavigationController, por lo que el contenido de cada subvista deben ser creados para mostrar correctamente para los límites de navView.

En cualquier caso, esta técnica funciona, ya que he creado una aplicación que la utiliza con éxito. La única otra forma en que alguna vez conseguí que esto funcione es crear una clase de controlador de navegación personalizada desde cero, replicando la funcionalidad de UINavigationController, pero sin el cambio automático de tamaño (que también hice en el pasado), y eso puede ser un dolor. Espero que esto ayude.

+1

te amo, gracias –

4

Esta es mi primera publicación, aunque he estado aprendiendo muchísimo de esta comunidad. Así que quería agradecerles a todos por esto.

Mi desafío, y la razón por la que estoy publicando aquí, fue responder a esta pregunta y refactorizarla para mis necesidades, utilizando iOS5 y guiones gráficos. Esta solución probablemente no funcionará bien para implementaciones anteriores, pero pensé que la publicaría de todos modos.

Esto es lo que terminé y funciona bien (aplicación para iPad).Todo esto está configurado en mi UIViewController predeterminado, configurado como raíz en la vista del guión gráfico.

Espero que esto ayude!

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 



    // Do any additional setup after loading the view, typically from a nib. 

    /*vars: 
    rightSideView is the containing view - this is where the UINavigationController will sit, along with it's view stack 
    myStoryboard is self-explanatory I think 
    myViewController is identified as in storyboard as "accountView", to be pulled from the storyboard and used as the rootview 
    */ 


    //Steps 

    //Add subview to this controller's view (for positioning) 


    UIView *rightSideView = [[UIView alloc]initWithFrame:CGRectMake(30, 30, 500, 600)]; 
    rightSideView.clipsToBounds = YES;//this little baby makes sure that the damn navigation bar clips!! 

    rightSideView.backgroundColor = [UIColor grayColor];//so I can see it 

    //instantiate view controller for nav controller's root view 
    UIStoryboard *myStoryboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle mainBundle]]; 
    UIViewController *myViewController = [myStoryboard instantiateViewControllerWithIdentifier:@"accountView"]; 

    //create NavController 
    UINavigationController *myNavController = [[UINavigationController alloc]initWithRootViewController:myViewController]; 

    //Add navController as one of my child ViewControllers 

    [self addChildViewController:myNavController]; 

    //Add NavController's view into my constrained view 
    [rightSideView addSubview:myNavController.view]; 

    //Finally, add right side view as a subview of myself 
    [self.view addSubview:rightSideView]; 



} 
+0

Esto es lo que necesitaba, ¡gracias! –