iphone resize uipopovercontroller

iphone - UIPopoverController w/UINavigationController Subview contentSizeForViewInPopover no funciona en Parent



resize (6)

Creo que podría haberlo resuelto mientras luchaba con este problema por un tiempo. Podría ser un poco optimista, así que no dude en comentar si esta solución no le funciona.

En cada viewController que se muestra con la jerarquía de navegación, establezca la propiedad contentSizeForViewInPopover en el método viewDidAppear: a su tamaño apropiado.

- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self setContentSizeForViewInPopover:CGSizeMake(320, 320)]; }

Otra cosa que aprendí es que al tocar de nuevo mientras se edita un campo de texto, el tamaño permanece pequeño en lugar de la vista anterior más grande. Llame al método resignFirstResponder en su textField en el viewWillDisappear del controlador.

Tengo curiosidad por saber si esta solución funciona en sdks.

Tengo un UIPopoverController con una subclase UINavigationController. Tanto las vistas de padres como de hijos son vistas de la UIT.

Cuando llamo a la vista principal originalmente con contentSizeForViewInPopover = (320,480) funciona muy bien.

Cuando hago clic en la vista secundaria, cambio el tamaño de la ventana emergente a contentSizeForViewInPopover = (320,780)

Cuando vuelvo a la vista principal, no puedo hacer que la ventana emergente cambie de tamaño a contentSizeForViewInPopover = (320,480). La ventana emergente se mantiene en el tamaño (320,780).

He estado intentando todo pero solo faltaba algo. Alguien sabe cómo cambiar el tamaño de la vista con UIPopoverControllers en el escenario anterior?

¡¡Gracias por adelantado!!


Creo que tuve el mismo problema y lo resolví estableciendo el tamaño de la vista en la ventana emergente cada vez que la vista estaba a punto de aparecer. Me gusta esto:

-(void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; self.contentSizeForViewInPopover = CGSizeMake(320, 444); //Set your own size }

Espero que esto te ayude.


Después de probar muchas cosas, la respuesta de @ chuck-k me ayudó a resolver decentemente mis problemas con el popover UINavigationController en iOS7.

Esto es lo que hice:

  • para cada UIViewController dentro del UINavigationController calculo el tamaño del contenido que quiero que se muestre en el método - (CGSize)contentSizeForViewInPopover plus navigationController.navigationBar.frame.size.height (que siempre es 44, creo). No uso ninguna otra funcionalidad de ventanas emergentes en estos controladores UIViewControllers.

  • Declaré mi UIViewController que crea el UINavigationController como un UINavigationControllerDelegate

  • Luego en el delegado ....

.....

- (void)navigationController:(UINavigationController *)navigationController willShowViewController: (UIViewController *)viewController animated:(BOOL)animated { BOOL popoverAnimation = NO; if ( self.myPopoverController.popoverContentSize.height < viewController.contentSizeForViewInPopover.height ) popoverAnimation = YES; [self.myPopoverController setPopoverContentSize:viewController.contentSizeForViewInPopover animated:popoverAnimation]; }

La comprobación de altura compara el tamaño del contenido de la ventana emergente del controlador de la vista actual con el tamaño del contenido de la ventana emergente del controlador de la vista "entrante". Utilizo animation = NO cuando se pasa de un tamaño de contenido de popover más grande -> más pequeño , porque de lo contrario obtengo un poco de animación de reposicionamiento desigual en iOS7. Pero, curiosamente, si animación = NO cuando se pasa de un tamaño de contenido de popover más pequeño -> más grande, el tamaño de popover aumentaría al tamaño que esperaba pero no mostraría contenido más grande que el tamaño de contenido previamente más pequeño ... configuración de animación = SÍ resuelto este tema para mi (Solo verifico la altura porque en mi caso el ancho es fijo).

Al usar esta técnica, casi todo funciona a mi satisfacción y espero que esto pueda ayudar a alguien más.


En mi proyecto tuve que cambiar dinámicamente el tamaño de la ventana emergente.

Hice el controlador original delegado de mi controlador de contenido emergente e implementé el método de delegado que se llama cada vez que se cambia el tamaño:

El código está abajo, espero que ayude a alguien:

-(void) popover:(UIViewController*)controller didChangeSize:(CGSize)size{ if ([controller class] == [AZViewController class]){ if (!_popoverController){ _popoverController = [[UIPopoverController alloc] initWithContentViewController:controller]; } _popoverController.popoverContentSize = size; } }


La propiedad contentSizeForViewInPopover del controlador de vista solo establece el tamaño predeterminado (inicial) de su contenido UIPopoverController . Para cambiar el tamaño del UIPopoverController en un momento arbitrario, debe establecer su propiedad popoverContentSize . Tenga en cuenta que popoverContentSize es una propiedad de UIPopoverController y no del controlador de vista (por lo que probablemente necesitará una referencia al controlador de popover).

Para restablecer el tamaño de la UINavigationControllerDelegate cada vez que un controlador de vista se convierte en el controlador de vista superior de un UINavigationController , puede usar los métodos de protocolo UINavigationControllerDelegate :

navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if (viewController == viewControllerToResize) { referenceToUIPopoverController.popoverContentSize = CGSizeMake(320,480); } }


Tuve el mismo problema, pero ninguna de las soluciones anteriores funcionó para mí. Sin embargo, al tratar de combinar sus enfoques, me inspiré para probar una forma ligeramente diferente de atacar el problema. Esto funciona para mí:

-(void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { viewController.contentSizeForViewInPopover = navigationController.topViewController.view.frame.size; }

Tengo tres ventanas emergentes diferentes que utilizan controladores de vista de navegación. Esta solución tiene el efecto secundario de trabajar con todos ellos porque no hace una referencia específica a ninguno de los controladores de ventanas emergentes, pero termina usando el popoverContentSize del controlador de ventanas emergentes que se está utilizando actualmente.