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.
¿Cómo resolvió esto? – Zebs
@bentford ¿Cómo resolvió * usted * esto? –
¿Quién eras tú, DenverCode9? ¡¿QUÉ VISTE?! – buley