Animate popoverContentsize al presionar el controlador de vista de navegación en popover en iPad

¿Cómo consigo que mi UIPopoverController para animar su tamaño cuando su contenido UINavigationController empuja un nuevo controlador?

tengo unUIPopover siendo mostrado desde unUIBarButtonItem en mi aplicación de iPad Contiene unaUINavigationViewController, que tiene una especie de ventana de configuración como su controlador de vista raíz. La ventana de configuración es una subclase deUITableViewController (estilo establecido en agrupado), y al tocar cualquiera de sus celdas se insertan diferentes controladores de vista de "selección" en el controlador de navegación que también son subclases deUITableViewController.

Para cada una de las vistas selectas, enviewDidAppear, Estoy configurandocontentSizeForViewInPopover apropiadamente:

self.contentSizeForViewInPopover = CGSizeMake(320, self.items.count * 44);

Pero no anima el cambio; cuando finaliza la animación de navegación, la ventana emergente se ajusta a la nueva altura (el ancho nunca cambia de 320). La navegación hacia atrás anima el cambio de tamaño (realizado con la técnica deesta respuesta), pero el delantero nunca lo hace.

He intentado obtener una referencia al popover en el que está y usandosetPopoverContentSize:animated: pero no funciona He miradootro preguntas en vano.

¿Cómo hago para animar siempre el cambio de tamaño correctamente?

Actualizar: He configurado un proyecto de prueba simple para probar esto. Es una aplicación de barra de pestañas para iPad configurada en Xcode. Agregué un elemento de la barra de pestañas a la barra de navegación en uno de los controladores de vista. Cuando se presiona ese botón, el controlador presenta una ventana emergente que contiene un controlador de navegación que tiene un muy simpleUITableViewController subclase, llamadaTestContentViewController, como su controlador de vista de raíz.

EnviewDidLoad De esa subclase, genero aleatoriamente una serie de elementos:

self.numItems = arc4random() % 10 + 3;

Este es mi número de filas; número de secciones es 1. EncellForRowAtIndexPath Acabo de configurar el texto de la etiqueta de la celda y devolverlo. Cuando se selecciona una fila, genero otra instancia de la misma clase y la empujo en la pila.

Sin hacer nada en absoluto con elcontentSizeForViewInPopover propiedad en cualquier VC, la ventana emergente solo alcanza su altura máxima y permanece allí, sin importar cuántas filas haya en mi vista de tabla.

Si configuro el tamaño en viewDidAppear, así:

-(void)viewDidAppear:(BOOL)animated
{
  self.contentSizeForViewInPopover = CGSizeMake(320, self.numItems * 44);
  [super viewDidAppear:animated];
{
Cuando aparece la ventana emergente por primera vez, parpadea muy rápidamente hasta la altura máxima y luego se ajusta a la altura que establezco.Cuando se presiona un nuevo controlador en el controlador de navegación, se ajusta a su altura sin animación.Cuando navego hacia atrás, si el VC al que me estoy acercando es más alto que el del que salgo, se anima al tamaño correcto. Si lo que estoy haciendo es más pequeño, no hace nada.

Si hago lo mismo pero enviewWillAppear:

Cuando aparece el popover por primera vez, es de altura completaCuando primero toco una fila y obtengo un nuevo controlador en la pila, se anima a un mínimo de aproximadamente 400px de altura. Cuando se empuja un nuevo controlador en la pila, si necesita más altura, lo obtiene. Si no, se queda en lo que era antes.

Si hago lo mismo enviewDidLoad, es básicamente lo mismo queviewWillAppear excepto que aparece en el tamaño correcto al principio.

He intentado configurar el delegado del controlador de navegación para que sea el VC que presenta la ventana emergente, y luego configurar la altura de la ventana emergente (setPopoverContentSize:animated:) ennavigationController:didShowViewController:animated:, pero la altura resultante es un poco más baja. Creo que el tamaño que establezco debe tener en cuenta la altura adicional de la barra de navegación integrada en la parte superior de la ventana emergente. Y la animación cuando se empuja un nuevo controlador en la pila es rara.

Actualizar de nuevo: Veraquí Para el mismo problema resuelto con el más nuevo.UIPopoverPresentationController.

Respuestas a la pregunta(3)

Su respuesta a la pregunta