Animate popoverContentsize ao pressionar o controlador de visualização de navegação no popover no iPad

Como obtenho meu UIPopoverController para animar seu tamanho quando seu contido UINavigationController envia um novo controlador?

eu tenho umUIPopover sendo exibido a partir de umUIBarButtonItem no meu aplicativo para iPad. Ele contém umUINavigationViewController, que tem uma espécie de janela de configurações como seu controlador de visualização raiz. A janela de configurações é uma subclasse deUITableViewController (estilo definido como agrupado), e tocando em qualquer uma das suas células empurra diferentes controladores de view "chooser" no controlador nav que também são subclasses deUITableViewController.

Para cada uma das visualizações do seletor,viewDidAppear, Estou definindocontentSizeForViewInPopover adequadamente:

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

Mas isso não anima a mudança; quando a animação de navegação termina, o popover se encaixa na nova altura (a largura nunca muda de 320). Navegar para trás anima a mudança de tamanho (realizada com a técnica deesta resposta), mas para frente nunca faz.

Eu tentei obter uma referência para o popover e usandosetPopoverContentSize:animated: mas não funciona. Eu olhei parade outros questões sem sucesso.

Como faço para animar sempre a mudança de tamanho corretamente?

Atualizar: Eu configurei um projeto de teste simples para tentar isso. É um aplicativo de barra de guias para iPad configurado no Xcode. Eu adicionei um item da barra de abas na barra de navegação em um dos controladores de visualização. Quando esse botão é pressionado, o controlador apresenta um popover que contém um controlador de navegação que tem um controle muito simples.UITableViewController subclasse, chamadaTestContentViewController, como seu controlador de visualização raiz.

EmviewDidLoad dessa subclasse, eu gero aleatoriamente um número de itens:

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

Este é o meu número de linhas; número de seções é 1. EmcellForRowAtIndexPath Acabei de definir o texto do rótulo da célula e devolvê-lo. Quando uma linha é selecionada, eu gero outra instância da mesma classe e a coloco na pilha.

Sem fazer nada com ocontentSizeForViewInPopover Propriedade em qualquer VC, o popover só vai para a sua altura máxima e permanece lá, não importa quantas linhas estão na minha visão de tabela.

Se eu definir o tamanho em viewDidAppear, assim:

-(void)viewDidAppear:(BOOL)animated
{
  self.contentSizeForViewInPopover = CGSizeMake(320, self.numItems * 44);
  [super viewDidAppear:animated];
{
Quando o popover aparece pela primeira vez, ele pisca muito rapidamente até a altura total e, em seguida, se encaixa na altura que defini.Quando um novo controlador é pressionado no controlador de navegação, ele se ajusta à sua altura sem animação.Quando eu navego de volta, se o VC que eu estou pulando para é mais alto do que o que eu estou pulando, ele anima ao tamanho correto. Se o que eu estou procurando é menor, não faz nada.

Se eu fizer a mesma coisa, mas emviewWillAppear:

Quando o popover aparece pela primeira vez, é altura totalQuando eu primeiro clico em uma linha e obtenho um novo controlador na pilha, ele é animado para um mínimo de 400px de altura. Quando um novo controlador é empurrado na pilha, se precisar de mais altura, ele o recebe. Se não ficar no que era antes.

Se eu fizer a mesma coisaviewDidLoadé basicamente o mesmo queviewWillAppear exceto que aparece no tamanho certo no começo.

Eu tentei definir o delegado do controlador nav para ser o VC que apresenta o popover e, em seguida, defina a altura do popover (setPopoverContentSize:animated:) emnavigationController:didShowViewController:animated:, mas a altura resultante é um pouco menor. Eu acho que o tamanho que eu coloquei lá precisa levar em conta a altura extra da barra de navegação embutida no topo do popover. E a animação ao empurrar um novo controlador na pilha é estranha.

Atualize novamente: VejoAqui para o mesmo problema resolvido com o mais recenteUIPopoverPresentationController.

questionAnswers(3)

yourAnswerToTheQuestion