QUESTION:
I have a UIPopoverController with navigationController and bunch of subviews. The size of the popover is set just before it's shown like this:
[self.myPopover setPopoverContentSize:CGSizeMake(320, 500)];
That works fine. The popover is shown with adjusted size. When another view is pushed on navigation stack the size of a popover is set again - need different height - in viewWillAppear method:
self.contentSizeForViewInPopover = CGSizeMake(320, 700);
This also works fine. When I go back to a previous view the size does not change.
I added the same call in viewWillAppear in first view but the view does not resize.
How can I manage resizing of popover when navigating between views?
ANSWER:
This is what I discovered:
- When you set the contentSizeForViewInPopover
in your view controller it won't be changed by the popover itself
- even though popover size may change while navigating to different controller.
- When the size of the popover will change while navigating to different controller, while going back, the size of the popover does not restore - Changing size of the popover in viewWillAppear gives very strange animation (when let's say you popController inside the popover) - I'd not recommend it
- For me setting the hardcoded size inside the controller would not work at all - my controllers have to be sometimes big sometimes small - controller that will present them have the idea about the size though
A solution for all that pain is as follows: You have to reset the size of currentSetSizeForPopover
inviewDidAppear. But you have to be careful, when you will set the same size as was already set in fieldcurrentSetSizeForPopover
then the popover will not change the size. For this to happen, you can firstly set the fake size (which will be different than one which was set before) followed by setting the proper size. This solution will work even if your controller is nested inside the navigation controller and popover will change its size accordingly when you will navigate back between the controllers.
You could easily create category on UIViewController with the following helper method that would do the trick with setting the size:
- (void) forcePopoverSize {
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
Then just invoke it in -viewDidAppear
of desired controller.
- (void) forcePopoverSize {
CGSize currentSetSizeForPopover = self.contentSizeForViewInPopover;
CGSize fakeMomentarySize = CGSizeMake(currentSetSizeForPopover.width - 1.0f, currentSetSizeForPopover.height - 1.0f);
self.contentSizeForViewInPopover = fakeMomentarySize;
self.contentSizeForViewInPopover = currentSetSizeForPopover;
}
Then just invoke it in -viewDidAppear
of desired controller.