Animuj popoverContentsize, naciskając kontroler widoku nawigacji w popover na iPadzie

Jak uzyskać mój UIPopoverController do animowania jego rozmiar, gdy jego zawarte UINavigationController popycha nowy kontroler?

mamUIPopover wyświetlane od aUIBarButtonItem w mojej aplikacji na iPada. Zawiera aUINavigationViewController, który ma rodzaj okna ustawień jako kontroler widoku głównego. Okno ustawień jest podklasąUITableViewController (styl ustawiony na zgrupowany), a dotknięcie dowolnej z jego komórek przesuwa różne kontrolery widoku „wyboru” na kontrolerze nawigacyjnym, które są również podklasamiUITableViewController.

Dla każdego widoku selektora, wviewDidAppear, UstawiamcontentSizeForViewInPopover odpowiednio:

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

Ale to nie animuje zmiany; po zakończeniu animacji nawigacyjnej okienko przyciąga do nowej wysokości (szerokość nigdy nie zmienia się od 320). Poruszanie się do tyłu animuje zmianę rozmiaru (wykonaną techniką odta odpowiedź), ale przekaz nigdy nie działa.

Próbowałem uzyskać odniesienie do popoveru, w którym jest i jest używanesetPopoverContentSize:animated: ale to nie działa. Obejrzałeminny pytania bezskutecznie.

Jak sprawić, by zawsze animował poprawnie rozmiar?

Aktualizacja: Przygotowałem prosty projekt testowy, aby to wypróbować. Jest to aplikacja na pasku kart dla iPada skonfigurowana w Xcode. Dodałem element paska kart do paska nawigacji w jednym z kontrolerów widoku. Po naciśnięciu tego przycisku kontroler wyświetla popover, który zawiera kontroler nawigacji, który ma bardzo prostyUITableViewController podklasa, zwanaTestContentViewController, jako kontroler widoku głównego.

WviewDidLoad z tej podklasy generuję losowo kilka elementów:

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

To jest moja liczba wierszy; liczba sekcji wynosi 1. IncellForRowAtIndexPath Po prostu ustawiam tekst etykiety komórki i zwracam. Po wybraniu wiersza generuję kolejne wystąpienie tej samej klasy i wciskam je na stos.

Bez robienia czegokolwiek zcontentSizeForViewInPopover właściwość w dowolnym VC, popover po prostu osiąga maksymalną wysokość i pozostaje tam bez względu na to, ile wierszy jest w moim widoku tabeli.

Jeśli ustawię rozmiar w viewDidAppear, tak:

-(void)viewDidAppear:(BOOL)animated
{
  self.contentSizeForViewInPopover = CGSizeMake(320, self.numItems * 44);
  [super viewDidAppear:animated];
{
Gdy pojawi się popover, miga bardzo szybko do pełnej wysokości, a następnie przyciąga do wysokości, którą ustawiłem.Po naciśnięciu nowego kontrolera na kontrolerze nawigacyjnym dociera on do swojej wysokości bez animacji.Gdy nawiguję do tyłu, jeśli VC, do którego się pojawię, jest wyższy niż ten, z którego wyskakuję, animuje się do właściwego rozmiaru. Jeśli to, na co wpadam, jest mniejsze, nic nie robi.

Jeśli zrobię to samo, ale wviewWillAppear:

Gdy pojawi się pierwszy popover, ma pełną wysokośćKiedy po raz pierwszy stukam wiersz i otrzymuję nowy kontroler na stosie, animuje on do wysokości co najmniej około 400 pikseli. Gdy nowy kontroler zostanie wciśnięty na stos, jeśli potrzebuje większej wysokości, to go otrzymuje. Jeśli nie, to pozostanie na tym, co było wcześniej.

Jeśli zrobię to samo wviewDidLoad, to w zasadzie takie samo jakviewWillAppear poza tym, że na początku pojawia się w odpowiednim rozmiarze.

Próbowałem ustawić delegata kontrolera nawigacyjnego na VC, który przedstawia popover, a następnie ustawić wysokość popovera (setPopoverContentSize:animated:) wnavigationController:didShowViewController:animated:, ale wynikowa wysokość jest nieco mniejsza. Myślę, że rozmiar, który tam ustawiłem, musi uwzględniać dodatkową wysokość paska nawigacyjnego wbudowanego w szczyt popovera. A animacja podczas pchania nowego kontrolera na stosie jest dziwna.

Zaktualizuj ponownie: Widziećtutaj za ten sam problem rozwiązany z nowszymUIPopoverPresentationController.

questionAnswers(3)

yourAnswerToTheQuestion