2009-07-06 16 views
9

Tengo un UINavigationController personalizado que admite la rotación automática. También tengo un UIDatePicker en una de mis vistas que coloco en la pila del controlador de navegación. La rotación automática funciona si comienzo la vista del selector de fecha en vertical y luego gírelo. Si intento cargar la vista del selector de fecha en el paisaje para comenzar, la vista está completamente desordenada. Parece que sí lo haría si no admite la rotación y el cuadro solo tiene aproximadamente la mitad del selector visible y descentrado.Cargando un UIDatePicker en Landscape en un UINavigationController

He intentado hacer mi propio selector de fecha que admite rotación automática en caso de que ese fuera el problema, he intentado crear dos vistas diferentes y cambiarlas, y he intentado cambiar el tamaño del marco de vista en el Método ViewWillAppear. Ninguno de ellos parece estar funcionando para mí hasta el momento.

¿Alguien tiene alguna sugerencia sobre cómo hacer que el selector de fechas se muestre en el paisaje correctamente en un controlador de navegación? Probablemente estoy pasando por alto algo simple y la respuesta está justo en frente de mí, pero no la estoy encontrando.

Respuesta

0

Bueno lo arreglé. Logré hacer un control para ver cuál era la orientación, y luego eliminar el selector de fecha y el código, recreé un selector de fecha y lo agregué. Eso funcionó, no era hermoso, pero funcionó.

+1

Aparentemente esto no se visualiza correctamente, si el dispositivo ya está en orientación horizontal cuando la vista controlador se carga desde la punta. Entonces, su solución para recrear el control tiene sentido, pero encontré una solución mejor, vea mi respuesta. – progrmr

0

Agregar selector de fecha para ver que se gira automáticamente (vista del controlador, no directamente en la ventana).

Conjunto self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

13

me encontré con el mismo problema. Cuando carga una vista cuando ya está en orientación horizontal, el UIPicker no se representa correctamente. Pasé varias horas tratando de encontrar una solución alternativa hasta que encontré una solución en this page from Llamagraphics. Agrega este código en viewDidLoad del controlador de vista que tiene el selector:

for (UIView* subview in myPicker.subviews) { 
    subview.frame = myPicker.bounds; 
} 

Visita la webpage para más detalles. Gracias Stuart!

+0

¡Esto funciona genial! – morais

+0

Gracias! ¡He pasado horas intentando resolver este problema! – Nathan

+0

Solución brillante y simple. Esto fue realmente enloquecedor, gracias! – MystikSpiral

0

Esto es lo que funcionó para mí. Cuando creo el Selector de fechas, lo hago creo que es en el modo vertical:

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait animated: NO]; 
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero]; 
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO]; 

Así que, básicamente, puedo cambiar la orientación, crear el selector de fechas, y cambiar la orientación de regreso inmediato a lo que era antes. Establecí el ancho del selector (ancho de la pantalla) y la altura (216) en otro lugar.

Tengo esta pista de otra página.

0

Tuve el mismo problema al mostrar el selector de fecha (en modo de temporizador) redimensionado horizontalmente en el iPad. No pude conseguir ninguna de las soluciones conocidas para este error, así que arreglé esto con un hack feo que involucró poner dos datapickers en la vista - uno se redimensiona en segundo plano, y el otro es de tamaño estándar (320px) en primer plano ... Lo sé, suena mal, pero se muestra correctamente y eso es lo que cuenta. Es culpa de Apple de todos modos;)

1

El siguiente código funcionará tanto en modo retrato como en modo paisaje. Para ello es necesario establecer su origen tableview marco de esa manera a continuación: -

_dateTableViewCell=[self.tableView dequeueReusableCellWithIdentifier:@"DatePickerCell"]; 
if (self.dateTableViewCell==nil) 
{ 
    CGRect rect; 
    self.dateTableViewCell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DatePickerCell"]; 
    UIDatePicker *datePicker=[[UIDatePicker alloc]initWithFrame:frame]; 
    datePicker.datePickerMode=UIDatePickerModeDateAndTime; 
    datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    CGRect cellRect = self.dateTableViewCell.frame; 
    cellRect.size.height = 216; 
    self.dateTableViewCell.frame = cellRect; 
    CGRect startRect = self.dateTableViewCell.frame; 
    startRect.origin.x = 0.0; 
    datePicker.frame = startRect; 
    [self.dateTableViewCell.contentView addSubview:datePicker]; 
} 
Cuestiones relacionadas