Анимация popoverContentsize при нажатии контроллера представления навигации в popover на iPad

How do I get my UIPopoverController to animate its size when its contained UINavigationController pushes a new controller?

у меня естьUIPopover отображается изUIBarButtonItem в моем приложении для iPad. Он содержитUINavigationViewController, который имеет своего рода окно настроек в качестве корневого контроллера просмотра. Окно настроек является подклассомUITableViewController (стиль установлен как сгруппированный), и нажатие на любую из его ячеек приводит к изменению "chooser" просмотр контроллеров на контроллере nav, которые также являются подклассамиUITableViewController.

Для каждого из представлений выбора, вviewDidAppearЯ настраиваюсьcontentSizeForViewInPopover соответственно:

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

Но это не оживляет изменение; Когда навигационная анимация заканчивается, поповер привязывается к новой высоте (ширина не меняется с 320). Навигация в обратном направлении оживляет изменение размера (выполняется с помощью техники изэтот ответ), но вперед никогда не делает.

Я пытался получить ссылку на поповер, в котором он находится и который используетсяsetPopoverContentSize:animated: но это не работает. Я смотрел наДругой вопросы но безрезультатно.

Как заставить его всегда правильно анимировать изменение размера?

Update: Я опробовал простой тестовый проект, чтобы попробовать это. Это приложение панели вкладок для iPad, настроенное в Xcode. Я добавил элемент панели вкладок на панель навигации в одном из контроллеров представления. Когда эта кнопка нажата, контроллер представляет всплывающее окно, которое содержит контроллер навигации, который имеет очень простойUITableViewController подкласс, называетсяTestContentViewController, как его корневой контроллер просмотра.

ВviewDidLoad из этого подкласса я случайным образом генерирую несколько элементов:

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

Это мое количество строк; Количество секций составляет 1. ВcellForRowAtIndexPath Я просто устанавливаю текст метки ячейки и возвращаю его. Когда строка выбрана, я генерирую другой экземпляр того же класса и помещаю его в стек.

Ничего не делая сcontentSizeForViewInPopover свойство на любом VC, поповер просто достигает своей максимальной высоты и остается там, независимо от того, сколько строк в моем табличном представлении.

Если я установлю размер в viewDidAppear, вот так:

-(void)viewDidAppear:(BOOL)animated
{
  self.contentSizeForViewInPopover = CGSizeMake(320, self.numItems * 44);
  [super viewDidAppear:animated];
{
When the popover first appears, it flashes very quickly to full height and then snaps to the height I set. When a new controller is pushed on the navigation controller, it snaps to its height with no animation. When I navigate back, if the VC that I'm popping to is taller than the one I'm popping from, it animates to the correct size. If what I'm popping to is smaller, it does nothing.

Если я сделаю то же самое, но вviewWillAppear:

When the popover first appears, it's full-height When I first tap a row and get a new controller on the stack, it animates to a minimum of about 400px tall. When a new controller is pushed on the stack, if it needs more height it gets it. If not it stays at what it was before.

Если я сделаю то же самое вviewDidLoadэто в основном так же, какviewWillAppear за исключением того, что сначала он появляется в нужном размере.

Я попытался установить делегат навигационного контроллера в качестве виртуального канала, который представляет поповер, а затем установить высоту поповера (setPopoverContentSize:animated:) вnavigationController:didShowViewController:animated:, но результирующая высота немного отключена. Я думаю, что размер, который я установил там, должен учитывать дополнительную высоту панели навигации, встроенной в верхнюю часть поповера. А анимация при установке нового контроллера в стек - странная.

Update again: УвидетьВот по той же проблеме решается с более новымUIPopoverPresentationController.

Ответы на вопрос(3)

Ваш ответ на вопрос