2011-10-18 11 views
5

Tengo varios UIViewControllers, cargados a través de UINavigationController, donde anulo loadView y configuro una vista personalizada para mostrar. Tengo problemas para configurar los marcos de algunas de las subvistas, y tal vez la vista en sí misma. Creo que UINavigationController o UIViewController pueden forzar su vista para llenar la pantalla cuando se muestran.¿UIViewController o UINavigationController configuran el tamaño de su vista?

Me pregunto si y cuando el tamaño de la vista está configurado. Y si está sucediendo, ¿está configurando el marco de la vista o haciéndolo de otra manera?

Gracias.

Actualización: acabo notado mientras se trabaja a través de este es que hago una nueva UINavigationController, con este método loadView:

- (void)loadView 
{ 
    UIView *view = [[UIView alloc] initWithFrame:CGRectMake(10.0f, 10.0f, 10.0f, 10.0f)]; 
    [view setBackgroundColor:[UIColor redColor]]; 
    self.view = view; 
    [view release]; 
} 

puedo obtener una vista roja ocupando toda la pantalla, a excepción de la situación barra y encabezado. ¿Cuándo se cambia el tamaño de mi vista para llenar la pantalla? ¿Y qué tamaño debería usar al crear la vista?

Respuesta

3

El framespace para la UIViewControllers se hace más pequeño, porque UINavigationController manipula la vista mediante la adición de un UINavigationBar, que se 44.0f de tamaño.

Se vuelve a clasificar según el tamaño porque usted substituye la vista con self.view = view; Si usted habría usado addSubview: en cambio habría quedado su tamaño original. logancautrell explicó cuándo y por qué.

+0

Gracias, por la aclaración. Al cargar mi vista en un controlador de vista loadView, cuando lo presiono a través de un UINavigationController, ¿solo necesito establecer el marco como CGRectMake (0.0, 0.0, 320.0, 416.0)? Como en el caso de que no sea necesario compensar en la coordenada de origen y del marco para UINavigationBar o la barra de estado? – Ryan

+0

La parte inferior de NavBar se convierte en el nuevo origen X, Y para los controladores de vista, solo necesita compensar la altura ajustada. Para estar seguro de las dimensiones, utilice 'NSLog (@" wxh =% fx% f ", self.view.frame.size.width, self.view.frame.size.height);' – Wolfert

+0

Gracias, eso lo aclara para mi. Todavía me pregunto cuándo cambiará la vista. Porque incluso si configuro el tamaño incorrecto en loadView se cambia para que tenga el tamaño correcto. Voy a aceptar tu respuesta, ya que me pone en marcha. Gracias de nuevo. – Ryan

9

UINavigationController dimensionará automágicamente la vista de un ViewController cuando se presione. A partir de los documentos:

pushViewController: animada:

El objeto en el parámetro viewController se convierte en el controlador de la vista superior en la pila de navegación. Al presionar un controlador de vista se obtiene la visualización de la vista que administra. La forma en que se muestra esa vista está determinada por el parámetro animado. Si el parámetro animado es SÍ, la vista se anima en su posición; de lo contrario, la vista simplemente se muestra en su lugar. La vista se redimensiona automáticamente para ajustarse entre la barra de navegación y la barra de herramientas (si está presente) antes de que se muestre.

Si desea que se muestre una vista más pequeña, deberá crear un contenedor y convertirlo en un elemento secundario de la vista de su VC, configurando el tamaño manualmente. La máscara de autoresize puede tener que establecerse correctamente, dependiendo de cómo se cree la vista.

+0

Gracias, debe haber sido la documentación que leí una vez, pero olvidé exactamente qué/dónde la leí. – Ryan

+2

¿Hay alguna manera de forzar al controlador de navegación a reajustar el tamaño del controlador de vista secundaria después de la operación de inserción? Estoy cambiando la altura del controlador de navegación pero por algún motivo no está ajustando automáticamente su contenido. – devios1

+0

También veo un problema por el cual el controlador de navegación no cambia el tamaño del tamaño de su controlador de vista infantil cuando gira el dispositivo durante la transición. – AdamPro13

Cuestiones relacionadas