2011-03-03 5 views
18

Estoy usando una aplicación splitView en el iPad. la vista de detalles tiene 2 subView en él que se dibuja de acuerdo con los límites de vista de etail. el problema es que siempre se dibujan en sí mismos (1024, 768) incluso cuando el ipad está en modo apaisado.¿La vista de detalles de SplitView devuelve el marco de vista incorrecto?

BTW - si llamo luego en modo vertical y gire el ipad, se escalará a (706,768).

He comprobado el punto de vista del marco y los límites detalle, ya que creó (en la vista de método de carga lo hizo) y en ambos casos me sale esto:

NSLog(@"screen frame = %@",NSStringFromCGRect(self.view.frame)); 
NSLog(@"screen bounds = %@",NSStringFromCGRect(self.view.bounds)); 

En la ventana de depuración me sale:

2011-03-03 10:58:19.376 English Club[63347:207] screen frame = {{0, 0}, {768, 1024}} 
2011-03-03 10:58:19.382 English Club[63347:207] screen bounds = {{0, 0}, {768, 1024}} 

No puedo averiguar dónde está el problema. ¿Alguien puede ayudarme?

Gracias por cualquier ayuda.

+0

También he notado este extraño problema. Recomendaría presentar un informe de error con Apple, eso es lo que hice. http://bugreporter.apple.com – Jasarien

+2

¿Respondió Apple a esta presentación de errores? Por cierto, ¿cómo estás agregando esas subvistas a la vista principal? ¿Está configurando correctamente las propiedades de conversión automática en ellos? ¿Puede mostrarnos más código para profundizar en su problema? gracias – marzapower

+0

Entonces, ¿Qué es lo que realmente quieres hacer? ¿Desea establecer el tamaño de la vista de detalle? o la vista dentro de la vista de detalle. Puede establecer el tamaño de marco de la vista dentro de la vista de detalle pero no el tamaño de la vista de detalle porque el tamaño base de la vista seguirá siendo estándar según el controlador splitviewcontroller. Por favor, avíseme si tiene una pregunta diferente. – AppAspect

Respuesta

6

En viewDidLoad se supone que la vista no tiene su tamaño real. Eso se configura más tarde mediante métodos de diseño. Pero eso no debería detenerte :) ¿Cómo configuras tu máscara de aumento de tamaño? Si lo ha configurado correctamente, todo debería estar bien.

+0

Gracias, volveré a verificarlo. – shannoga

1

Sí Si ha establecido la propiedad de tamaño automático debe estar bien ..

Puede configurar ellos a través de la semilla o por código

self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 

aplausos ...

+0

Gracias intentaré eso – shannoga

2

Actualmente estoy escribiendo una Aplicación UISplitViewController, y me decepcionó descubrir que está prohibido cambiar el tamaño del detalle o la vista maestra. Está totalmente a cargo del tamaño de esos fotogramas secundarios.

Al igual que UINavigationController y UITabBarController, UISplitViewController es un controlador de vista 'contenedor' y da forma a sus subvistas para adaptarse a sus propósitos.

La función self debugDumpTheFrames imprime el marco del uisplitviewcontroller y sus dos subtramas. Puedo imprimir los fotogramas de viewDidLoad del splitViewController, y establecer un temporizador para llamar a esta función por segunda vez 2 segundos más tarde (tiempo durante el cual no hago nada):

[self debugDumpTheFrames]; 
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(debugDumpTheFrames) userInfo:nil repeats:NO]; 

Si nos fijamos en la salida, se puede ver que algún tiempo después de viewdidload, el UISplitViewController ha cambiado los marcos de sus subvistas.

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{0, 0}, {768, 1024}} 
size of splitviewcontrollers master view frame {{0, 0}, {768, 1024}} 

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{321, 0}, {703, 748}} 
size of splitviewcontrollers master view frame {{0, 0}, {320, 748}} 

Dónde exactamente esto cambia de tamaño, no estoy seguro; pero el uisplitviewcontroller es el jefe de esos marcos, y son propiedades privadas, así que tocarlos es motivo de rechazo en la tienda.

3

Realice sus operaciones en viewWillAppear en lugar de viewDidLoad.

4

si espera a que - (void) viewDidLayoutSubviews que tendrá el tamaño adecuado

0

Si realmente necesita para obtener la anchura correcta en viewDidLoad, se puede acceder al controlador de la vista dividida y obtener el ancho de la controlador de vista de detalle.

E.g. en Swift:

func getDetailViewSize() -> CGSize { 
    var detailViewController: UIViewController 
    if (self.splitViewController?.viewControllers.count > 1) { 
     detailViewController = self.splitViewController?.viewControllers[1] as! UIViewController 
    } else { 
     detailViewController = self.splitViewController?.viewControllers[0] as! UIViewController 
    } 
    return detailViewController.view.frame.size 
} 
Cuestiones relacionadas