Change contentSizeForViewInPopover to navigationController on iOS

I have a UIPopoverController with a navigationController and a bunch of subviews. The size of the popover is set before it is displayed as follows:

[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];

It works great. Popcord is displayed with the set size. When another view is pushed onto the navigation stack, the popover size is set again - different heights are required - in viewWillAppear mode:

self.contentSizeForViewInPopover = CGSizeMake(320, 700);

This also works great. When I return to the previous view, the size will not change.

I added the same call to viewWillAppear in the first view, but the view does not change.

How can I control resize popover while navigating between views?

+5
source share
2

:

- (CGSize)contentSizeForViewInPopover
{
    return CGSizeMake(320, 200);
}

- (void) forcePopoverSize 
{
    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
    CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, 
                                          currentSetSizeForPopover.height - 1.0f);
    self.contentSizeForViewInPopover = fakeMomentarySize;
}


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

    [self forcePopoverSize];
}

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

    CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
    self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
+3

. , , . .

contentViewController UIPopoverController * parent;

UIPopoverController . , , . UIViewController UIPopowerController, - :

if (self.popoverController == nil) {
    _contentController = [[ContentViewController alloc] initWithNibName:@"ContentViewController"
                                                                 bundle:[NSBundle mainBundle]]; 

    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:_contentController]; 
    _contentController.parent = popover;
    [popover setPopoverContentSize: CGSizeMake(520.0,580.0)];

    popover.delegate = self;

    self.popoverController = popover;
}

contentViewController, :

-(void)setNewSize:(CGSize) newSize {

    [_parent setPopoverContentSize:newSize animated:YES];
}
+3

All Articles