2015-09-22 17 views
7

Ich verwende UIPopoverPresentationController für Popovers in einer iOS App. Wenn ein Navigationscontroller in einem Popover einen neuen Ansichtscontroller drückt, wird die Größe des Popover auf die preferredContentSize des Ansichtscontrollers geändert. Wenn der Navigationscontroller jedoch einen Ansichtscontroller vom Stapel entfernt, wird die Größe des Popover nicht auf die vorherige Größe geändert. Wie kann ich es machen?Wie kann ich die Größe von UIPopoverPresentationController bei Navigationspop ändern?

Mögliches Duplikat von this question, aber für das moderne UIPopoverPresentationController.

Aktualisierung: Siehe here zum Beispiel Code zur Veranschaulichung des Problems. Klonen Sie es und führen Sie es in einem iPad Simulator aus. Tippe auf den Popover-Button und du bekommst ein Popover mit einem Nav-Controller. Tippen Sie auf die Schaltfläche "Push-Leiste" und Sie erhalten eine neue VC auf dem Stapel (die Größe ist in der Navigationsleiste). Pop und es passt sich nicht an das an, was es war.

Antwort

15

Fügen Sie diese Zeile:

self.navigationController.preferredContentSize = self.preferredContentSize; 

auf Ihre viewWillAppear: Methode, so dass es nun wie folgt aussehen:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if (self.navigationController) 
    { 
     UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"Push" style:UIBarButtonItemStylePlain target:self action:@selector(onPush)]; 
     self.navigationItem.rightBarButtonItem = item; 
     self.navigationItem.title = NSStringFromCGSize(self.preferredContentSize); 
     self.view.backgroundColor = [UIColor lightGrayColor]; 

     self.navigationController.preferredContentSize = self.preferredContentSize; 
    } 
} 

Es wird darauf achten, dass die bevorzugte Größe der Navigation-Controller jedes Mal aktualisiert wird Der angezeigte View-Controller ändert sich. Ich habe es in Ihrem Beispielcode getestet und das Problem wurde behoben.

+0

Schön. Ich habe tatsächlich eine Unterklasse von 'UINavigationController', die ich verwende, um [dieses Problem] zu lösen (http://stackoverflow.com/questions/32697436/how-can-i-change-the-opacity-of-the-overlay-behind -uipopoverpresentationcontroll /), also habe ich alle Varianten von Push und Pop außer Kraft gesetzt und dieses Prinzip dort angewendet statt in allen VCs, die ich in Nav-Controllern in Popovers haben kann. –

+0

Sie sind ein Meister. – Claudio

3

nächsten in Ihrem ViewController Code Fügen Sie einfach

- (void) viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 

    self.navigationController.preferredContentSize = CGSizeMake(200, self.parentViewController.childViewControllers.lastObject.preferredContentSize.height-100); 
} 

Hier die video ist. Hoffe, das ist ein Verhalten, das Sie erwarten.

+0

Das sieht vielversprechend aus. Aber kannst du es generisch machen, also nimmst du nicht die +/- 100 Punktgrößenänderung an? –

+0

@ Mr. Jefferson Was meinst du vielversprechend? :) Du hast 'Pop 'geschrieben und es wird nicht auf das reduziert, was es war'. Jetzt kannst du es auf die Originalgröße zurücksetzen. Und ich habe gedacht, dass dies nur ein Beispiel von dir war, um das Problem zu veranschaulichen. Und 'make it generic' ist keine klare Aufgabe :) Können Sie eine Formel oder eine Beschreibung bereitstellen, wie Pop-Over reagieren sollte? Weil das Problem nicht in generischen war ... :) –

+0

Ihre Antwort geht davon aus, dass die VC Sie werden 200 Punkte breit und 100 Punkte kürzer als die, von denen Sie Pop sind. Kannst du deine Antwort umschreiben, um das nicht anzunehmen? –

Verwandte Themen